(一)简单工厂模式
2015-09-10 18:05
232 查看
见源码注释:
输出:
3
-0.5
基类析构函数调用
基类析构函数调用
请按任意键继续. . .
#include "stdafx.h" #include <string> #include <iostream> #include <memory>//为了应用智能指针 using namespace std; //COperation:抽象的算术类。用来代表工厂制造出的抽象产品。 //CAddOperation、CSubOperation:具体的算术类。用来代表工厂制造出的具体产品。 //CSimpleFactory:工厂类,用来根据“参数”分门别类的创造产品,返回的是一个抽象产品的指针, //这样应用这个指针调用重写的接口时,就可以根据产品的不同而产生不同的结果,这就是多态, //实现了产品可以独立变化,与客户端关注结果的接口解耦。 //运用模板可以忽略操作类型的影响 template<typename T> class COperation { public: //虚析构不能少 virtual ~COperation() { cout << "基类析构函数调用" << endl; } virtual T GetResult() = 0; T m_a; T m_b; }; template<typename T> class CAddOperation : public COperation<T> { public: T GetResult() { return m_a + m_b; } }; template<typename T> class CSubOperation : public COperation<T> { public: T GetResult() { return m_a - m_b; } }; template<typename T> class CSimpleFactory { public: //工厂“制造”的产品用智能指针管理,不用关心释放问题 static unique_ptr<COperation<T>> CreateOperate(const string &str) { if ("+" == str) { return unique_ptr<CAddOperation<T>>(new CAddOperation<T>); } else if ("-" == str) { return unique_ptr<CSubOperation<T>>(new CSubOperation<T>); } else { return nullptr; } } }; int _tmain(int argc, _TCHAR* argv[]) { unique_ptr<COperation<int>> pOper = CSimpleFactory<int>::CreateOperate("+"); pOper->m_a = 1; pOper->m_b = 2; cout << pOper->GetResult() << endl; unique_ptr<COperation<double>> pOper2 = CSimpleFactory<double>::CreateOperate("-"); pOper2->m_a = 1.5; pOper2->m_b = 2.0; cout << pOper2->GetResult() << endl; return 0; }
输出:
3
-0.5
基类析构函数调用
基类析构函数调用
请按任意键继续. . .
相关文章推荐
- TCP3次握手建立连接,4次握手断开连接
- mysql max_allowed_packet 设置过小导致记录写入失败
- javascript之数组操作
- SpringMvc+FreeMaker中json 时间格式转换
- POJ 3974 Palindrome
- [C++11 并发编程] 17 超时等待 - time_point
- Spring搭建框架
- linux php安装
- ajax登录请求,无法跳转
- 获取iOS设备的相关信息
- c实现面向对象
- Spring MVC之@RequestBody, @ResponseBody 详解
- mybatis实战教程(mybatis in action),mybatis入门到精通
- JUnit编写单元测试代码注意点小结
- Java对象clone
- mysql开启慢查询日志
- HDU 3613 Best Reward
- mysql 年龄段划分
- 读Swift官方文档的收获(一)
- tomcat中设置多项目共享jar;类包