1.1 ABSTRACT FACTORY 抽象工厂
1、 意图
提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。
2、 动机
“客户仅与抽象定义的接口交互,而不使用特定的具体类的接口。”
这里的主要的思想是封装对象的创建的过程。客户端可以不需要知道具体要创建那些对象,而只需要知道创建某一系列的对象所用到的“工厂对象”即可。
3、 适用性
一个系统要独立于它的产品的创建、组合和表示时。
一个系统要由多个产品系列中的一个来配置时。
当你要强调一系列相关的产品对象的设计以便进行联合使用时。
当你提供一个产品类库,而只想显示它们的接口而不是实现时。
4、 结构
5、 参与者
AbstractFactory:创建一系列对象的抽象类。
ConcreteFactory:实现具体创建产品对象的操作。
AbstractProduct:为一类产品对象声明一个接口。
ConcreteProduct:定义一个被相应的具体工厂创建的对象;实现AbstractProduct接口。
Client:仅使用AbstractFactory和AbstractProduct类声明的接口。
6、 协作
在运行时刻,创建一个ConcreteFactory实例,它创建具有特定实现的对象。为创建不同的对象,客户应使用不同的具体工厂。
AbstractFactory将具体对象的创建延迟到它的子类ConcreteFactory中。
7、 效果
1) 它分离了具体的类:一个工厂封装创建产品的责任和过程,它将客户和类的实现分离。客户通过抽象接口操作实例。产品的类名也在具体工厂实现中分离,他们不出现在客户代码中。
2) 它使得易于交互产品系列。
3) 它有利于产品的一致性。
4) 难于支持新的种类。