设计模式(一)简单工厂模式
2016-04-27 08:00
218 查看
(一)简单工厂模式
主要用于创建对象。新添加类时,不会影响以前的系统代码。
核心思想是用一个工厂来根据输入的条件产生不同的类,然后根据不同类的virtual函数得到不同的结果。
GOOD:适用于不同情况创建不同的类时。
BUG:客户端必须要知道基类和工厂类,耦合性差。
主要用于创建对象。新添加类时,不会影响以前的系统代码。
核心思想是用一个工厂来根据输入的条件产生不同的类,然后根据不同类的virtual函数得到不同的结果。
GOOD:适用于不同情况创建不同的类时。
BUG:客户端必须要知道基类和工厂类,耦合性差。
#include <iostream> using namespace std; //(一)简单工厂模式 // 主要用于创建对象。新添加类时,不会影响以前的系统代码。 // 核心思想是用一个工厂来根据输入的条件产生不同的类,然后根据不同类的virtual函数得到不同的结果。 // GOOD:适用于不同情况创建不同的类时 // BUG:客户端必须要知道基类和工厂类,耦合性差 //基类 class COperation { public: double m_nFirst; double m_nSecond; virtual double GetResult() { double dResult=0; return dResult; } }; //加法 class AddOperation : public COperation { public: virtual double GetResult() { return m_nFirst+m_nSecond; } }; //减法 class SubOperation : public COperation { public: virtual double GetResult() { return m_nFirst-m_nSecond; } }; //乘法 class MulOperation : public COperation { public: virtual double GetResult() { return m_nFirst*m_nSecond; } }; //除法 class DivOperation : public COperation { public: virtual double GetResult() { return m_nFirst/m_nSecond; } }; //工厂类 class CCalculatorFactory { public: static COperation* Create(char cOperator); }; COperation* CCalculatorFactory::Create(char cOperator) { COperation *oper; //在C#中可以用反射来取消判断时用的switch,在C++中用什么呢?RTTI?? switch (cOperator) { case '+': oper=new AddOperation(); break; case '-': oper=new SubOperation(); break; case '*': oper=new MulOperation(); break; case '/': oper=new DivOperation(); break; default: oper=new COperation(); } return oper; } //客户端 int main() { double a,b; char ch; while(cin>>a>>b>>ch) { if(b==0) { cout<<"非法输入,请重新输入"<<endl; continue; } COperation * op = CCalculatorFactory::Create(ch); op->m_nFirst=a; op->m_nSecond=b; cout<<op->GetResult()<<endl; } return 0; }
相关文章推荐
- ssl协议工作原理
- Android常用颜色大全
- HTML5 LocalStorage 本地存储
- 挑战第二章 poj 3009 水题DFS
- Bzoj3190:[JLOI2013]赛车:半平面交
- Linux设置环境变量方法(export PATH)
- [sh]ls -F一种非常有用的ls格式
- 夺命雷公狗ThinkPHP项目之----企业网站30之网站前台头部导航的高亮显示
- 语音识别(Speaker Recognition)
- iOS开发:调用相关设备
- U8SDK——支持自动拆分成多个dex文件(MultiDex支持)
- 队项目个人工作总结(4月27日)
- PHP中session变量的销毁
- poj 3262 Protecting the Flowers 贪心
- 每日站立会议——20160427
- 详解CALayer 和 UIView的区别和联系
- 不知道是win10在抽风还是校园网在抽风
- 夺命雷公狗ThinkPHP项目之----企业网站29之网站前台左侧导航的高亮显示
- angular自定义指令
- 下拉列表,鼠标移动上去改变颜色