设计模式之抽象工厂模式
来源:互联网 发布:一落叶而知天下秋启示 编辑:程序博客网 时间:2024/06/04 18:14
(一)概念:抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的。抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象。
(二)模式中包含的角色及其职责
1、抽象工厂(Creator)角色
抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口。
2、具体工厂( Concrete Creator)角色
具体工厂类是抽象工厂的一个实现,负责实例化某个产品族中的产品对象。
3、抽象(Product)角色
抽象模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
4、具体产品(Concrete Product)角色
抽象模式所创建的具体实例对象
(三)抽象工厂模式的实现
#includeusing 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;}
(四)三种工厂模式的区别
简单工厂 : 用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力)
工厂方法 :用来生产同一等级结构中的固定产品。(支持增加任意产品)
抽象工厂 :用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)
阅读全文
1 0
- 设计模式之抽象工厂
- 设计模式 之 抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之-抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式 之 抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- spring实战-Spring中Filter以及处理Exception方式
- 数据结构与算法_二叉查找树
- iOS项目统计总代码行数
- Machine Learning in action --regression(已勘误)
- Java多线程复习与巩固(六)--线程池ThreadPoolExecutor
- 设计模式之抽象工厂模式
- myeclipse配置maven
- 华为中兴设备debug使用
- 创建守护式容器
- syslog的使用方法个人小结
- 《JAVA与模式》之单例模式
- 在 Ubuntu 16.04 上安装 Bro 网络分析器
- 【腾讯云开发中的坑1】java.net.BindException: Permission denied <null>:443
- 归并排序