1.1 ABSTRACT FACTORY 抽象工厂

1、 意图

提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。

2、 动机

“客户仅与抽象定义的接口交互,而不使用特定的具体类的接口。”

这里的主要的思想是封装对象的创建的过程。客户端可以不需要知道具体要创建那些对象,而只需要知道创建某一系列的对象所用到的“工厂对象”即可。

3、 适用性

一个系统要独立于它的产品的创建、组合和表示时。 

一个系统要由多个产品系列中的一个来配置时。 

当你要强调一系列相关的产品对象的设计以便进行联合使用时。 

当你提供一个产品类库,而只想显示它们的接口而不是实现时。 

4、 结构

wps_clip_image-278

5、 参与者

AbstractFactory:创建一系列对象的抽象类。

ConcreteFactory:实现具体创建产品对象的操作。

AbstractProduct:为一类产品对象声明一个接口。

ConcreteProduct:定义一个被相应的具体工厂创建的对象;实现AbstractProduct接口。

Client:仅使用AbstractFactory和AbstractProduct类声明的接口。

6、 协作

在运行时刻,创建一个ConcreteFactory实例,它创建具有特定实现的对象。为创建不同的对象,客户应使用不同的具体工厂。

AbstractFactory将具体对象的创建延迟到它的子类ConcreteFactory中。

7、 效果

1) 它分离了具体的类:一个工厂封装创建产品的责任和过程,它将客户和类的实现分离。客户通过抽象接口操作实例。产品的类名也在具体工厂实现中分离,他们不出现在客户代码中。

2) 它使得易于交互产品系列。

3) 它有利于产品的一致性。

4) 难于支持新的种类。


只有注册用户登录后才能发表评论。


网站导航:
 

posts - 19, comments - 0, trackbacks - 0, articles - 0

Copyright © 常高伟