通过抽象工厂模式,可以处理具有相同或相似等级结构的多个产品族中的产品对象的创建问题。
抽象工厂模式的结构

从上图可以看出,抽象工厂模式涉及到以下角色:
- 抽象工厂角色(AbstractFactory): 通常使用java接口或者抽象类实现,是该模式的核心,与应用系统的商业逻辑无关。
- 具体工厂类角色(Concrete Factory): 这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑与应用系统的商业逻辑紧密相关。通常用具体java类实现。
- 抽象产品角色(Abstract Product): 担任这个角色的是模式所创建产品对象的父类,或它们共同拥有的接口。通常使用java接口或java抽象类实现。
- 具体产品角色(Concrete Product): 抽象工厂模式所创建的任何产品对象都是某个具体产品类的实例。
示意性源码
可以看出抽象工厂角色规定了两个工厂方法,分别提供两个不同等级结构的产品的对象。


一般而言,有多少个产品等级结构,就会在工厂角色中发现多少个工厂方法。
每一个产品等级结构中有多少具体产品,就有多少个产品族,也就会在工厂等级结构中发现多少个具体工厂。







在什么情形下应该使用抽象工厂模式
- 一个系统不应当依赖于产品类实例如何被产品创建,组合和表达的细节,这对所有形态的工厂模式都是重要的。
- 这个系统的产品有多于一个的产品族,而系统只消费其中某一族的产品
- 同属于同一个产品族的产品是一起使用的,这一约束必须在系统的设计中体现出来。
- 系统提供一个产品类的库,所有产品以同样的接口出现,从而使客户端不依赖于实现。
设计模式~抽象工厂模式
原文:https://www.cnblogs.com/Vincent-yuan/p/13401705.html