抽象工厂(AbstractFactory)

来源:互联网 发布:java base64 utf8 编辑:程序博客网 时间:2024/06/08 15:41

本章节部分内容摘录自李英军等译的《设计模式》(虽然大部分文字是反复推敲才明白意思),同时也包含了笔者的学习心得。


1.意图

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

2.适用性

。一个系统要独立于它的产品的创建、组合表示它的产品表示工厂中创建的产品,组合体现了这些产品的相关性和依赖性,表示是指产品的具体实现)

。一个系统要由多个产品系列中的一个来配置时(有多个具体的工厂,但同一时刻只使用一个)

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

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

3.结构



。AbstractFactory
——声明一个创建抽象产品对象的操作接口。
。ConcreteFactory
——实现创建具体产品对象的操作。
。AbstractProduct
——定义一个将被相应的具体工厂创建的产品对象。
——实现AbstractProduct接口。
。Clinet
——仅使用由AbstractFactory和AbstractProduct类声明的接口。

4.优缺点

。分离了具体的类:工厂封装创建产品对象的责任和过程,它将客户与类的实现分离
。使得易于交换产品系列
。有利于产品的一致性
。难以支持新种类的产品

5.实现

。创建抽象工厂基类
。创建具体的抽象工厂
。创建抽象工厂的工厂方法(有点绕,抽象工厂是一种设计模式,工厂方法也是一种设计模式)
。创建产品基类
。创建具体的产品
。创建产品的工厂方法
。如果有必要,把抽象工厂添加到单件中(单件是一种设计模式)

6.代码

按自己理解编写的,编码工具VS2008。
地址:设计模式之抽象工厂案例代码