设计模式(一)简单工厂模式

来源:互联网 发布:百度壁纸无法连接网络 编辑:程序博客网 时间:2024/04/29 17:33

(一)简单工厂模式

主要用于创建对象。新添加类时,不会影响以前的系统代码。

核心思想是用一个工厂来根据输入的条件产生不同的类,然后根据不同类的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;}


0 0
原创粉丝点击