1、定义
定义一个创建对象的接口,由子类决定去实例化具体的类,工厂方法把实例化推迟到了子类中。
2、关键点
在需要创建大量对象的时候可以使用工厂方法模式,遵循依赖倒置原则,依赖抽象接口,不依赖具体类,能够很好的减少客户端与目标类之间的耦合问题。
3、UML类图

4、代码实现
1、工厂方法模式实现
/**
* 水果接口
*/
public interface IFruit {
void get();
}
/**
* 苹果实体类
*/
public class Apple implements IFruit {
public void get() {
System.out.println("我是苹果!");
}
}
/**
* 香蕉实体类
*/
public class Banana implements IFruit {
@Override
public void get() {
System.out.println("我是香蕉!");
}
}
/**
* 水果工厂类
*/
public class FruitFactory {
private FruitFactory() {
throw new RuntimeException("cannot be instantiated");
}
public static IFruit getApple() {
return new Apple();
}
public static IFruit getBanana() {
return new Banana();
}
/*****************************************************************************/
/**
* 通过反射获取实例,添加类型时不需要修改工厂类
*
* @return
*/
public static IFruit getFruit(Class<? extends IFruit> cls) {
IFruit fruit = null;
try {
fruit = cls.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return fruit;
}
}
5、总结
工厂方法模式主要用于创建大量的对象,遵循了依赖导致原则,能够减少客户端以产品类之间的耦合。但是工厂方法模式没有遵循开闭原则,在需要添加或者减少一个新的产品时,需要需修改工厂类的结构。
代码:https://gitee.com/os2chen/DesignPattern
参考:《Head First Design》、《Android源码设计模式解析与实战》
本文介绍了一种常用的软件设计模式——工厂方法模式。该模式定义了一个创建对象的接口,并将实例化工作推迟到子类中进行,有助于降低客户端与具体产品类间的耦合度。
1022

被折叠的 条评论
为什么被折叠?



