Java与模式笔记(4)

来源:互联网 发布:自己的淘宝信誉怎么看 编辑:程序博客网 时间:2024/05/17 21:57

抽象工厂(Abstract Factory)模式是对象的创建模式,又称工具箱(KitToolkit)模式。抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,创建多个产品族中的产品对象。

结构与角色(图)

 

抽象工厂(Abstract Factory)角色:担任这个角色的是工厂方法模式的核心,它是与应用系统的商业逻辑无关的。通常使用Java接口或者抽象Java类实现,而所有的具体工厂类必须实现这个Java接口或者继承这个抽象Java类。

具体工厂类(Concrete Factory)角色:这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的。通常使用具体的Java类实现这个角色。

抽象产品(Abstract Product)角色:担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。通常使用Java接口或者抽象Java类实现这一角色。

具体产品(Concrete Product)角色:抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例。这是客户端最终要的东西,其内部一定充满了应用系统的商业逻辑。通常使用具体的Java类实现这一角色。

抽象工厂模式与工厂发放模式的最大区别:工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则需要面对多个产品等级结构。

抽象工厂模式是工厂方法模式的进一步推广。

在以下情况下,应当考虑使用抽象工厂模式

1、  一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节,这对于所有形态的工厂模式都是重要的。

2、  这个系统的产品有多余一个的产品族,而系统只消费其中某一族的产品。

3、  同属于同一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来。

4、  系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现。

在系统中产品族增加时,抽象工厂模式是支持“开-闭”原则的。对于产品等级结构的增加,抽象工厂模式是不支持“开-闭”原则的。综合起来,抽象工厂模式以一种倾斜的方式支持增加新的产品,它为新产品族的增加提供方便,而不能为新的产品等级结构的增加提供这样的方便。