C++工厂方法模式
2016-07-14 17:35
337 查看
class IFactoryBase { public: IFactoryBase(void); virtual ~IFactoryBase(void); public: virtual IProductBase* CreateProduct() = 0; }; class IProductBase { public: IProductBase(void); ~IProductBase(void); public: virtual void SetProductInfo() = 0; }; class CFactoryA : public IFactoryBase { public: CFactoryA(void); ~CFactoryA(void); public: virtual IProductBase* CreateProduct(); }; IProductBase* CFactoryA::CreateProduct() { return new CProductA(); } class CProductA : public IProductBase { public: CProductA(void); ~CProductA(void); public: void SetProductInfo(){} }; class CFactoryB : public IFactoryBase { public: CFactoryB(void); ~CFactoryB(void); public: virtual IProductBase* CreateProduct(); }; IProductBase* CFactoryB::CreateProduct() { return new CProductB(); } class CProductB : public IProductBase { public: CProductB(void); ~CProductB(void); public: virtual void SetProductInfo(){} }; int _tmain(int argc, _TCHAR* argv[]) { 73 IFactoryBase *pFactory = new CFactoryA(); 74 if (NULL != pFactory) 75 { 76 IProductBase *pProductBase = pFactory->CreateProduct(); 77 if (NULL != pProductBase) 78 { 79 pProductBase->SetProductInfo(); 80 } 81 82 delete pProductBase; 83 } 84 85 delete pFactory; return 0; }
核心思想:将工厂抽象出来,将产品抽象出来,子工厂负责new 子产品指针,返回抽象产品类指针,外面调用时只需要生成基类工厂指针,调用创建产品函数,就可以对该产品进行具体的操作,优点是能够将添加产品完全独立出来不再修改内部代码。
与简单工厂比较:修正了简单工厂模式中不遵循开放---封闭原则,例如添加新产品时仍需要修改工厂基类内容,工厂方法模式将判断移动到客户端实现。
![](https://images2015.cnblogs.com/blog/665013/201607/665013-20160714171144561-1875794660.png)
部分代码:
相关文章推荐
- QAbstractListModel:Qml 使用C++model
- Leetcode 67. Add Binary (Easy) (cpp)
- C/C++ sort函数的用法
- 【7.13第三题】穿越栅栏【USACO2.4.2简单版本】
- C语言 程序 字符串转换成整型,整型转换成字符串
- 《C++ Primer Plus》第15章 友元、异常和其他 学习笔记
- C语言文件操作之----文件的读写
- C++将使用类型转换
- 《C++ Primer Plus》15.5 类型转换运算符 学习笔记
- <C++略识>之内联函数
- <C++略识>之函数重载
- Strlen在实际使用中的一点体会
- C++语言语法你应该知道的(基础篇)
- C++ pair(对组)用法
- 精通C++资源管理-以对象管理资源
- <C++略识>之内存分配
- USACO2.4.2 穿越栅栏(简单版本) (重庆一中高2018级信息学竞赛测验2) 解题报告
- 有序数组长度为N 元素出现的长度为 大于等于 N 除 4 的最小的数
- 劣质的草(USACO 美国信息学月赛)【7.13考试第一题】
- Leetcode 258. Add Digits (Easy) (cpp)