计算器的实现:
1)业务逻辑代码
/************************************************
Class: 运算类
Description: 各种运算的父类,提供公共接口
************************************************/
class COperation
{
public:
double m_nFirst;
double m_nSecond;
public:
virtual double GetResult()
{
return 0;
}
};
/************************************************
Class: 加法运算类
Description: 实现两个数相加
************************************************/
class AddOperation : public COperation
{
double GetResult()
{
return m_nFirst + m_nSecond;
}
};
/************************************************
Class: 减法运算类
Description: 实现两个数相减
************************************************/
class SubOperation : public COperation
{
double GetResult()
{
return m_nFirst - m_nSecond;
}
};
/************************************************
Class: 乘法运算类
Description: 实现两个数相乘
************************************************/
class MulOperation : public COperation
{
double GetResult()
{
return m_nFirst * m_nSecond;
}
};
/************************************************
Class: 除法运算类
Description: 实现两个数相除
************************************************/
class DivOperation : public COperation
{
double GetResult()
{
return m_nFirst / m_nSecond;
}
};
/********************************************
Class: 工厂类
Description: 实现要实例化的对象
********************************************/
class CCalculatorFactory
{
COperation *oper;
public:
CCalculatorFactory();
~CCalculatorFactory();
COperation *CreateOperate(char operate);
};
//选择要初始化的类对象
COperation *CCalculatorFactory::CreateOperate(char operate)
{
switch(operate)
{
case '+':
oper = new AddOperation();
break;
case '-':
oper = new SubOperation();
break;
case '*':
oper = new MulOperation();
break;
case '/':
oper = new DivOperation();
break;
}
return oper;
}
2)界面显示代码
void dispaly(double &Num1, double &Num2, char &ch)
{
cout << "请输入第一个数:" ;
cin >> Num1;
cout << "请输入操作符:" ;
cin >> ch;
cout << "请输入第二个数:" ;
cin >> Num2;
}
void main()
{
double Num1, Num2;
char ch;
dispaly(Num1, Num2, ch);
COperation *op;
CCalculatorFactory calFactory;
op = calFactory.CreateOperate(ch);
op->m_nFirst = Num1;
op->m_nSecond = Num2;
cout << Num1 << " " << ch << " " << Num2 << " = " << op->GetResult() << endl;
}
这是利用简单工厂模式写得计算器类,好处是显而易见的:
1)可扩展性好
如果要增加功能的话,比如说增加开方,只需要再写一个子类来继承父类COperation,增加工厂类switch分支即可,对其他的运算没有丝毫影响。
2)可复用性好
如果你要利用MFC写一个计算器,这个业务逻辑代码可直接复用。
3)可维护性好
如果程序出问题了,比如说乘法运算时出错,那么只要去查看并单独测试乘法类那部分代码即可。
如果你对设计模式有兴趣的话,不妨看看大话设计模式这本书。这本书绝对不是枯燥的,作者诙谐幽默的语言会让你觉得学习也是一件很有趣的事!
参考:大话设计模式