您的位置:首页 > 其它

AbstractFactory——抽象工厂

2014-01-10 15:44 120 查看

一、定义

       GOF里对抽象工厂模式这样定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。

        有时候,我们希望在为客户代码提供实例化类的同时,能够控制应该对哪个类进行实例化,这种情况下,可以使用工厂模式,如果

需要,还可以提供一个方法来利用外部因素确定应该实例化哪个类。但是有时候,这些用于控制对哪个类进行实例化的外部因素往往涉

及多个类,这些类组成一个系列。抽象工厂模式使得我们可以创建某个对象系列的多个对象,一组相互关联或相互依赖的对象构成一个

对象系列。

二、应用场景

       考虑一个支持多种视感标准的用户界面工具包,例如Motif和Presentation Manager。不同的视感风格为诸如窗口、按钮等用户界

面“窗口组件”定义不同的外观和行为。为了保证视感风格之间的可移植性,一个应用不应该为一个特定的视感外观硬编码它的窗口组件。

       这里我们可以用一个抽象的WidgetFactory类,这个类声明了用来创建每一类基本窗口组件的接口。每一类窗口组件都有一个抽象

类,而具体子类则实现了窗口组件的特定视感风格。对于每一个抽象窗口组件类,WidgetFactory接口都有一个返回新窗口组件对象的操作。客户调用这些操作以获得窗口组件实例,但客户并不知道他们正在使用的是哪一个具体类。

       抽象工厂类常常是一个工厂方法的集合。每种视感标准都对应一个具体的WidgetFactory子类。每个子类实现那些用于创建合适视

感风格的窗口组件的操作。WidgetFactory增强了具体窗口组件之间的依赖关系。一个Motif的滚动条应该和Motif按钮,正文编辑器一起

使用,这一约束条件作为使用MotifWidgetFactory的结果被自动加上。



三、类图



四、与Builder的区别

       AbstractFactory类通常用工厂方法实现,也可以用Prototype实现,这在接下来的文章里会介绍。Builder和AbstractFactory相似,

两者都可以创建复杂对象。主要区别是Builder模式着重于一步一步构造一个复杂对象。而AbstractFactory着重于多个系列的产品对象。

Builder在最后一步返回产品,而对于AbstractFactory来说,产品是立刻返回的。Builder构造的最终产品之间差异可能会很大,而

AbstractFactory 构造的一系列组件有着相似的体系。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: