什么是工厂方法模式
工厂方法模式,定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类,是简单工厂模式的进一步抽象和推广。
工厂方法模式的层次结构
- 抽象产品角色:具体产品角色的抽象类,包含了具体产品对象的公共方法,如下图的Car。
- 具体产品角色:客户端使用工厂类所生成的最终目标的对象,如下图的Car1、Car2。
- 抽象工厂角色:是工厂方法的核心,具体工厂角色的抽象类,其中得到具体产品对象的功能变成其子类来实现,如下图的Factory。
- 具体工厂角色:根据需求实现抽象工厂角色,生成对应的具体产品角色,如下图的CarFactory1、CarFactory2。
工厂方法模式的优缺点
优点
不仅保持了简单工厂模式的优点,也克服了简单工厂模式的开放-封闭原则 (这里不理解的可以看我的《Java常用设计模式之简单工厂模式》)
缺点
每增加一个具体角色,都要添加一个产品工厂的类,增加开发的代码量
实例
抽象工厂角色:
具体工厂角色: 抽象产品角色: 具体产品角色: 客户端: 从实例中,我们再看工厂方法模式的优缺点:- 优点:这里不用像简单工厂模式中要对具体工厂类进行修改,而是将简单工厂的内部逻辑判断移到了客户端代码来进行,即如果我们加新功能,本来是修改工厂类代码,现在修改客户端代码,如上图我们只要在客户端修改,就可以进行不同具体产品的生成
Factory factory=new CarFactory1();
===>变成
Factory factory=new CarFactory2();
- 缺点:要新增一个具体工厂对象和一个具体产品对象,增加开发代码量
如果有什么疑问或者错误,欢迎指出或讨论,谢谢
参考资料:
- 《大话设计模式》