[设计模式笔记]一. 创建型模式--3.Abstract Factory模式(一)
2013-08-09 11:14
344 查看
创建型模式--3.Abstract Factory模式(一)
Abstract Factory(抽象工厂)模式, 又称工具箱(Kit 或Toolkit)模式.(对象创建型模式)
2.2 一个系统要有多个产品系列中的一个来配置时;
2.3 当你要强调以系列相关的产品对象的设计以便进行联合使用时;
2.4 当你提供一个产品类库, 而只想显示他们的接口而不是实现时;
图1
ConcteteFactory: 实现创建具体产品对象的操作.
AbstractProduct: 为一类产品对象声明一个接口.
ConceteProduct: 定义一个将被相应的具体工厂创建的产品对象; 实现AbstractProduct接口.
Client: 只是用AbstractFactory和AbstractProduct类声明的接口.(从图中可以很清晰看到)
6.2 它使得易于交换产品系列: V1系列使用ConcteteFactory1工厂类创建, V2系列使用ConcteteFactory2工厂类创建.
6.3 有利于产品的一致性: V1系列使用ConcteteFactory1工厂类创建, V2系列使用ConcteteFactory2工厂类创建
6.4 难以支持新种类的产品: 因为AbstractFactory接口确定了可以被创建的产品集合.
假设现在要增加ProductC, 需要做的事情是: AbstractFactory增加接口CreateProductC(), 那么所有AbstractFactory的子类都要增加函数CreateProductC().
7.2 ProductA_V1, ProductA_V2, ProductB_V1, ProductB_V2的组合只有ProductA_V1与ProductB_V1 和 ProductA_V2与ProductB_V2 这两种组合才是有效组合.
7.3 Client需要用的ProductA和ProductB必须都要生成, 而且A和B的系列号必须相同, 才适合使用Abstract Factory.模式
7.4 如果增加V3系列, 那么只需要增加ProductA_V3, ProductB_V3和,ConcteteFactory3 三个子类, Client修改的代码只是在创建工厂类的地方改为创建ConcteteFactory3 的对象即可.
7.5 我觉得6.4与7.4最难区分和理解.
一个具体的工厂类通常就是一个Singleton(模式了).
Abstract Factory(抽象工厂)模式, 又称工具箱(Kit 或Toolkit)模式.(对象创建型模式)
一. 意图
提供一个创建一系列或相互依赖对象的接口, 而不需要指定它们具体的类.二. 适用性
2.1 一个系统要独立于它的产品的创建, 组合和表示时;2.2 一个系统要有多个产品系列中的一个来配置时;
2.3 当你要强调以系列相关的产品对象的设计以便进行联合使用时;
2.4 当你提供一个产品类库, 而只想显示他们的接口而不是实现时;
三. 模式结构
图1
四. 角色说明
AbstractFactory : 声明一个创建抽象产品对象的操作接口.ConcteteFactory: 实现创建具体产品对象的操作.
AbstractProduct: 为一类产品对象声明一个接口.
ConceteProduct: 定义一个将被相应的具体工厂创建的产品对象; 实现AbstractProduct接口.
Client: 只是用AbstractFactory和AbstractProduct类声明的接口.(从图中可以很清晰看到)
五. 使用
Client要创建ProductA和ProductB的V1系列, 所以客户先创建ConreteFactory1, 调用CreateProductA()和CreateProductB()来完成Product的创建.六. 优缺点
6.1 分离了具体类: 很明显Client只是用AbstractFactory和AbstractProduct类声明的接口.6.2 它使得易于交换产品系列: V1系列使用ConcteteFactory1工厂类创建, V2系列使用ConcteteFactory2工厂类创建.
6.3 有利于产品的一致性: V1系列使用ConcteteFactory1工厂类创建, V2系列使用ConcteteFactory2工厂类创建
6.4 难以支持新种类的产品: 因为AbstractFactory接口确定了可以被创建的产品集合.
假设现在要增加ProductC, 需要做的事情是: AbstractFactory增加接口CreateProductC(), 那么所有AbstractFactory的子类都要增加函数CreateProductC().
七. 我的理解:
7.1 从图1中看出ConcteteFactory1创建ProductA_V1和ProductB_V1; ConcteteFactory2创建ProductA_V2和ProductB_V27.2 ProductA_V1, ProductA_V2, ProductB_V1, ProductB_V2的组合只有ProductA_V1与ProductB_V1 和 ProductA_V2与ProductB_V2 这两种组合才是有效组合.
7.3 Client需要用的ProductA和ProductB必须都要生成, 而且A和B的系列号必须相同, 才适合使用Abstract Factory.模式
7.4 如果增加V3系列, 那么只需要增加ProductA_V3, ProductB_V3和,ConcteteFactory3 三个子类, Client修改的代码只是在创建工厂类的地方改为创建ConcteteFactory3 的对象即可.
7.5 我觉得6.4与7.4最难区分和理解.
八. 相关模式
Abstract Factory模式通常可以使用Factory Method模式实现(CreateProductA就是工厂方法了, CreateProductB也是工厂方法.), 也可以使用Prototype模式实现.一个具体的工厂类通常就是一个Singleton(模式了).
相关文章推荐
- 设计模式笔记--创建型模式之四--原型prototype
- [设计模式笔记]快速小结(一)---对象创建型模式
- [设计模式笔记]一. 创建型模式--3.Abstract Factory模式(二)
- 设计模式(3)-创建型-抽象工厂(Abstract Factory)(个人笔记)
- 设计模式笔记 3.Builder 建造者模式(创建型模式)
- 设计模式笔记(4)---生成器模式(创建型)
- 设计模式(4)-创建型-建造者(Builder)(个人笔记)
- 设计模式复习笔记 (4)创建型模式:抽象工厂模式
- 设计模式笔记(2)---单件模式(创建型)
- 设计模式笔记(6)---原型模式(创建型)
- [设计模式笔记]一. 创建型模式-- 1.Simple Factory模式(一)
- 设计模式笔记(6)---原型模式(创建型)
- 【设计模式学习笔记三】【创建型模式】【抽象工厂(Abstract Factory)】
- 【设计模式学习笔记四】【创建型模式】【单例模式(Singleton)】
- C#面向对象设计模式学习笔记(5) - Prototype 原型模式(创建型模式)
- 设计模式笔记(2)---单件模式(创建型)
- 设计模式笔记(3)---抽象工厂模式(创建型)
- 设计模式笔记(6)---原型模式(创建型)
- [设计模式笔记]一. 创建型模式-- 1.Simple Factory模式(二)
- 学习Java 23种设计模式详解笔记之创建型模式(一)