您的位置:首页 > 其它

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

2016-04-27 08:00 218 查看
(一)简单工厂模式

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

核心思想是用一个工厂来根据输入的条件产生不同的类,然后根据不同类的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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: