抽象工厂模式
抽象工厂模式是所有形式的工厂模式中嘴抽象最具一般性的一种产品的形态。工厂方法模式针对的是一个产品等级结构,而抽象工厂模式则需要面对多个产品等级结构。
产品族是指位于不同产品等级结构中,功能相关的产品组成的家族。一个工厂等级结构可以穿件出分属于不同产品等级结构的一个产品族中的所有对象。通过工厂模式可以处理具有相同或相似等级结构的多个产品族中的产品对象的创建问题。
抽象工厂模式的四种角色:
A.抽象工厂角色,这个角色是工厂方法模式的核心,它是与应用系统的商业逻辑无关的。
B.具体工厂类角色,这个角色直接在客户端的调用下创建产品对象。
C.抽象产品角色,这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。
D.具体产品角色,抽象工厂模式所创建的任何产品对象都是某一个具体产品的实例。
以生产水果和蔬菜的农场为例来分析,这四种角色之间的关系,类图如下:
其中Gardener作为抽象工厂,它有两个实现类NorthernGardener、TropicalGardener;Fruit和Veggie作为抽象产品类,各自有两种实现类NorthernFruit、TropicalFruit和NorthernVeggie、TropicalVeggie。NorthernGardener持有两个NorthernFruit、NorthernVeggie产品的对象,TropicalGardener持有TropicalFruit、TropicalVeggie产品的对象(类图中没有显示出来)。
在什么情形下应当使用抽象工厂模式:
A.一个系统不应当依赖于产品类实例如何被创建,组合和表达的细节,这对于所有形态的工厂模式都是重要的。
B.这个系统的产品有多余一个产品族,而且系统只消费其中某一族产品(这是抽象工厂模式的原始用意)。
C.同属于一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来。
D.系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现。
参考文献:
Java与模式,阎宏,第十四章.
<!--EndFragment-->