Java常用设计模式之抽象工厂模式

257 阅读2分钟

什么是抽象工厂模式

提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类

抽象工厂模式的层次结构

  • 抽象工厂角色
  • 具体工厂角色
  • 抽象产品角色
  • 具体产品角色

抽象工厂模式
整体结构与工厂方法模式类似,区别在于工厂方法模式的抽象工厂角色是生成一类产品,而抽象工厂模式是生成一系列的产品,如上图的抽象工厂角色IFactory可以生成的对象是ProductA和ProductB

抽象工厂模式的优缺点

  • 优点:可以说是工厂方法模式的增强,可以在客户端代码的简单修改就进行产品系列的交换,让具体的创建实例过程与客户端分离,客户端是通过它们的抽象操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户端代码中。
  • 缺点:显而易见,就是增加更多的代码量,如果要在系列中新增加一个商品,例如ProductC,除了要新建ProductC,ProductC的实现类,还要在抽象工厂中添加createProductC()方法,以至于在之前的一些工厂实现类中例如ProductFactory1()中也要createProductC()方法,这样每一次系列中增加或者删除,如果量多的话,都会造成很多麻烦。

实例

抽象工厂角色:

抽象工厂角色

具体工厂角色:(这里以ProductFactory1为例子)

具体工厂角色

抽象产品角色:

抽象产品角色A

抽象产品角色B

具体产品角色:

具体产品A1

具体产品B1

客户端:

客户端

由实例我们再看抽象工厂模式的优缺点:

  • 优点:与工厂方法模式一样,只需要修改一行代码,就可以修改要生成的整个系列的具体产品。
IFactory factory = new ProductFactory1();
--->变成
IFactory factory = new ProductFactory2();
  • 缺点:如果要ProductC的系列,除了新增产品部分的代码外,在工厂部分的代码都要进行修改。

如果有什么疑问或者建议,可以在评论下方留言,欢迎讨论,谢谢。

参考资料

  • 《大话设计模式》