什么是抽象工厂模式
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类
抽象工厂模式的层次结构
- 抽象工厂角色
- 具体工厂角色
- 抽象产品角色
- 具体产品角色

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

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

抽象产品角色:


具体产品角色:


客户端:

由实例我们再看抽象工厂模式的优缺点:
- 优点:与工厂方法模式一样,只需要修改一行代码,就可以修改要生成的整个系列的具体产品。
IFactory factory = new ProductFactory1();
--->变成
IFactory factory = new ProductFactory2();
- 缺点:如果要ProductC的系列,除了新增产品部分的代码外,在工厂部分的代码都要进行修改。
如果有什么疑问或者建议,可以在评论下方留言,欢迎讨论,谢谢。
参考资料
- 《大话设计模式》