设计模式之抽象工厂模式(AbstructFactory)
2016-05-06 11:58
351 查看
抽象工厂模式(AbstructFactory)
优点:
1.可以支持不同类型的产品,使得产品的灵活性更强
2.可以很方便的一族中间的不同类型的产品
缺点:
结构过于臃肿,如果产品类型过大,就会难以管理
代码实现:
AbstructFactory.h
AbstructFactory.cpp
main.cpp
优点:
1.可以支持不同类型的产品,使得产品的灵活性更强
2.可以很方便的一族中间的不同类型的产品
缺点:
结构过于臃肿,如果产品类型过大,就会难以管理
代码实现:
AbstructFactory.h
#ifndef ABSTRUCTFACTORY_H #define ABSTRUCTFACTORY_H /*ProductA*/ class AbstructProductBaseA { public: AbstructProductBaseA(){} ~AbstructProductBaseA(){} virtual void show(); }; class ProductA : public AbstructProductBaseA { public: ProductA(){} ~ProductA(){} void show(); }; class ProductB : public AbstructProductBaseA { public: ProductB(){} ~ProductB(){} void show(); }; /*ProductAA*/ class AbstructProductBaseAA { public: AbstructProductBaseAA(){} ~AbstructProductBaseAA(){} virtual void show(); }; class ProductAA : public AbstructProductBaseAA { public: ProductAA(){} ~ProductAA(){} void show(); }; class ProductBB : public AbstructProductBaseAA { public: ProductBB(){} ~ProductBB(){} void show(); }; /*Factory*/ class AbstructFactory { public: AbstructFactory(){} ~AbstructFactory(){} virtual AbstructProductBaseA *createProductA() = 0; virtual AbstructProductBaseAA *createProductAA() = 0; }; class FactoryA : public AbstructFactory { public: FactoryA(){} ~FactoryA(){} AbstructProductBaseA *createProductA(); AbstructProductBaseAA *createProductAA(); }; class FactoryB : public AbstructFactory { public: FactoryB(){} ~FactoryB(){} AbstructProductBaseA *createProductA(); AbstructProductBaseAA *createProductAA(); }; #endif // ABSTRUCTFACTORY_H
AbstructFactory.cpp
#include "abstructfactory.h" #include <iostream> void AbstructProductBaseA::show() { std::cout << "this is AbstructProductBaseA" << std::endl; } void ProductA::show() { std::cout << "this is ProductA" << std::endl; } void ProductB::show() { std::cout << "this is ProductB" << std::endl; } void AbstructProductBaseAA::show() { std::cout << "this is AbstructProductBaseAA" << std::endl; } void ProductAA::show() { std::cout << "this is ProductAA" << std::endl; } void ProductBB::show() { std::cout << "this is ProductBB" << std::endl; } AbstructProductBaseA *FactoryA::createProductA() { return new ProductA; } AbstructProductBaseAA *FactoryA::createProductAA() { return new ProductAA; } AbstructProductBaseA *FactoryB::createProductA() { return new ProductB; } AbstructProductBaseAA *FactoryB::createProductAA() { return new ProductBB; }
main.cpp
#include <iostream> #include "abstructfactory.h" int main() { AbstructFactory *factory = new FactoryA; factory->createProductA()->show(); factory->createProductAA()->show(); factory = new FactoryB; factory->createProductA()->show(); factory->createProductAA()->show(); return 0; }
相关文章推荐
- iOS开发系列--IOS程序开发概览
- iOS post上传图片
- Android自定义控件进阶篇(一)
- 多通道图像遍历
- java枚举类型enum的使用
- Android Design Support Library初探,NavigationView实践
- android Service 的简单使用
- Imagetrick 漏洞的实例
- 把开源项目打包成jar包导入到本地仓库中
- require.js的用法
- Linux主机之间权限访问与开通
- 什么是MVVM?
- 王高利:在apache2.4上配置awstats后没权限,显示源码问题,报错总结
- char a[]和char *a的比较
- 五月六日学习日志
- 核心编程答案(第六章)
- php第十三节课
- 解决 jersey javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:119)
- iOS开发系列--网络开发
- Python 类与元类的深度挖掘 II【经验】