Java常用设计模式之工厂方法模式

什么是工厂方法模式

工厂方法模式,定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类,是简单工厂模式的进一步抽象和推广。

工厂方法模式的层次结构

  • 抽象产品角色:具体产品角色的抽象类,包含了具体产品对象的公共方法,如下图的Car。
  • 具体产品角色:客户端使用工厂类所生成的最终目标的对象,如下图的Car1、Car2。
  • 抽象工厂角色:是工厂方法的核心,具体工厂角色的抽象类,其中得到具体产品对象的功能变成其子类来实现,如下图的Factory。
  • 具体工厂角色:根据需求实现抽象工厂角色,生成对应的具体产品角色,如下图的CarFactory1、CarFactory2。
    工厂方法模式图解

工厂方法模式的优缺点

优点

不仅保持了简单工厂模式的优点,也克服了简单工厂模式的开放-封闭原则 (这里不理解的可以看我的《Java常用设计模式之简单工厂模式》)

缺点

每增加一个具体角色,都要添加一个产品工厂的类,增加开发的代码量

实例

抽象工厂角色:

抽象工厂角色
具体工厂角色:
具体工厂角色
抽象产品角色:
抽象产品角色
具体产品角色:
具体产品角色
客户端:
客户端
从实例中,我们再看工厂方法模式的优缺点:

  • 优点:这里不用像简单工厂模式中要对具体工厂类进行修改,而是将简单工厂的内部逻辑判断移到了客户端代码来进行,即如果我们加新功能,本来是修改工厂类代码,现在修改客户端代码,如上图我们只要在客户端修改,就可以进行不同具体产品的生成
Factory factory=new CarFactory1();
===>变成
Factory factory=new CarFactory2();
  • 缺点:要新增一个具体工厂对象和一个具体产品对象,增加开发代码量

如果有什么疑问或者错误,欢迎指出或讨论,谢谢

参考资料:

  • 《大话设计模式》

猜你喜欢

转载自juejin.im/post/5b2ba80651882574cf66a473