设计模式之抽象工厂模式
2017-08-19 14:16
260 查看
(一)概念:抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的。抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象。
(二)模式中包含的角色及其职责
1、抽象工厂(Creator)角色
抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口。
2、具体工厂( Concrete Creator)角色
具体工厂类是抽象工厂的一个实现,负责实例化某个产品族中的产品对象。
3、抽象(Product)角色
抽象模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
4、具体产品(Concrete Product)角色
抽象模式所创建的具体实例对象
(三)抽象工厂模式的实现
(四)三种工厂模式的区别
简单工厂 : 用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力)
工厂方法 :用来生产同一等级结构中的固定产品。(支持增加任意产品)
抽象工厂 :用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)
(二)模式中包含的角色及其职责
1、抽象工厂(Creator)角色
抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口。
2、具体工厂( Concrete Creator)角色
具体工厂类是抽象工厂的一个实现,负责实例化某个产品族中的产品对象。
3、抽象(Product)角色
抽象模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
4、具体产品(Concrete Product)角色
抽象模式所创建的具体实例对象
(三)抽象工厂模式的实现
#include using namespace std; class Fruit { public: virtual void GetFruit() = 0; }; class SouthApple: public Fruit { public: void GetFruit() { printf("我是南方生产的苹果\n"); } }; class NorthApple: public Fruit { public: void GetFruit() { printf("我是北方生产的苹果\n"); } }; class SouthPear: public Fruit { public: void GetFruit() { printf("我是南方生产的梨\n"); } }; class NorthPear: public Fruit { public: void GetFruit() { printf("我是北方生产的梨\n"); } }; class AbsFactory { public: virtual Fruit* CreateApple() = 0; virtual Fruit* CreatePear() = 0; }; class SouthFactory: public AbsFactory { public: Fruit * CreateApple() { return new SouthApple; } Fruit * CreatePear() { return new SouthPear; } }; class NorthFactory: public AbsFactory { public: Fruit * CreateApple() { return new NorthApple; } Fruit * CreatePear() { return new NorthPear; } }; void func(AbsFactory *factory) { Fruit * f1 = factory->CreateApple(); Fruit * f2 = factory->CreatePear(); f1->GetFruit(); f2->GetFruit(); delete f1; delete f2; } int main() { AbsFactory *factory = new SouthFactory; func(factory); delete factory; AbsFactory *factory1 = new NorthFactory; func(factory1); delete factory1; return 0; }
(四)三种工厂模式的区别
简单工厂 : 用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力)
工厂方法 :用来生产同一等级结构中的固定产品。(支持增加任意产品)
抽象工厂 :用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)
相关文章推荐
- 设计模式之--抽象工厂模式(学习分析笔记)
- 设计模式初探-抽象工厂模式(Abstract Factory)
- 设计模式 ——抽象工厂模式
- java设计模式之抽象工厂模式
- 设计模式----抽象工厂模式
- 23种设计模式2--创建型模式(工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式)
- Java设计模式--简单工厂模式与抽象工厂模式
- java23种常用设计模式之抽象工厂模式(Abstract Factory)2
- Android重拾设计模式系列——抽象工厂模式
- 设计模式—抽象工厂模式
- 设计模式之_简单工厂模式、工厂方法模式、抽象工厂模式 、策略模式、策略与工厂的区别(转)
- JAVA设计模式之 抽象工厂模式【Abstract Factory Pattern】
- 设计模式 - Abstract Factory模式(抽象工厂模式)
- [创建型模式系列]Abstract factory of Design Pattern模式设计之抽象工厂模式
- C#设计模式之抽象工厂模式
- 设计模式――抽象工厂模式(Abstract Factory Pattern)
- 设计模式读书笔记-----抽象工厂模式
- 设计模式笔记--抽象工厂模式
- 系统架构技能之设计模式-抽象工厂模式
- 设计模式(3)-抽象工厂模式