设计模式3:抽象工厂模式
抽象工厂模式:面对多个产品等级结构的系统设计。
该模式与工厂方法模式区别在于:工厂方法模式是针对一个产品等级结构,而抽象工厂模式是针对多个产品等级结构。
为说明这个模式,《java与模式》书还引入了一个产品族(product family)的概念:指的是位于不同产品等级结构中,功能项关联的产品组成的家族。

涉及到的角色:
抽工厂角色(creator):工厂模式的核心。与应用程序无关。任何在模式中创建对象的工厂类必须实现这个接口。这个角色在实际系统中也常常用抽象类实现。
具体工厂(concrete creator):实现抽象工厂接口的java类。含有与应用紧密相关的商业逻辑。工厂类在应用程序的直接调用下创建产品对象,往往由一个具体java类实现
抽象产品(product):是由工厂方法模式所创建的产品对象的父类或他们共同拥有的接口。抽象产品角色可以用一个java接口或java抽象类实现。
具体产品角色(concrete product):工厂方法模式所创建的任何对象都是这个角色的实例。具体产品角色由一个具体的java类实现。
抽象工厂是返回所有产品等级结构对象,而每个具体工厂角色,负责一个产品族中所有等级结构中产品的具体对象的创建。
常见的结构图如下:


抽象工厂模式使用场景如下:
1).一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节。这对于所有形态的工厂模式都是重要的。
2)同属于同一个产品族的产品是在一起使用的。这一约束必须在系统中体现出来。
3)系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现。
比较工厂模式和该模式的类图可以认为是改模式是对工厂模式中抽象工厂类的进一步抽象,可以容纳更多的产品对象。
设计模式学习列表:Java设计模式学习笔记