这些操作以获得窗口组件实例,但客户并不知道他们正在使用的是哪些具体类。这样客户就
f不依赖于一般的视感风格,如下页图所示。
f每一种视感标准都对应于一个具体的WidgetFactory子类。每一子类实现那些用于创建合适视感风格的窗口组件的操作。例如,MotifWidgetFactory的CreateScrollBar操作实例化并返回一个Motif滚动条,而相应的PMWidgetFactory操作返回一个Prese
tatio
Ma
ager的滚动条。客户仅通过WidgetFactory接口创建窗口组件,他们并不知道哪些类实现了特定视感风格的窗口组件。换言之,客户仅与抽象类定义的接口交互,而不使用特定的具体类的接口。WidgetFactory也增强了具体窗口组件类之间依赖关系。一个Motif的滚动条应该与Motif按钮、Motif正文编辑器一起使用,这一约束条件作为使用MotifWidgetFactory的结果被自动加上。4适用性在以下情况可以使用AbstractFactory模式一个系统要独立于它的产品的创建、组合和表示时。一个系统要由多个产品系列中的一个来配置时。当你要强调一系列相关的产品对象的设计以便进行联合使用时。当你提供一个产品类库,而只想显示它们的接口而不是实现时。5结构
6参与者
f此模式的结构如下图所示。AbstractFactoryWidgetFactory
f声明一个创建抽象产品对象的操作接口。Co
creteFactoryMotifWidgetFactory,PMWidgetFactory实现创建具体产品对象的操作。AbstractProductWi
dows,ScrollBar为一类产品对象声明一个接口。Co
creteProductMotifWi
dow,MotifScrollBar定义一个将被相应的
具体工厂创建的产品对象。实现AbstractProduct接口。Clie
t仅使用由AbstractFactory和AbstractProduct类声明的接口。7协作通常在运行时刻创建一个Co
creteFactroy类的实例。这一具体的工厂创建具有特定实现的产品对象。为创建不同的产品对象,客户应使用不同的具体工厂。AbstractFactory将产品对象的创建延迟到它的Co
creteFactory子类。8效果AbstractFactory模式有下面的一些优点和缺点:1它分离了具体的类AbstractFactory模式帮助你控制一个应用创建的对象的类。因为一个工厂封装创建产品对象的责任和过程,它将客户与类的实现分离。客户通过它们的抽象接口操纵实例。产品的类名也在具体工厂的实现中被分离;它们不出现在客户代码中。2它使得易于r