要变复制为复用、把业务逻辑与界面逻辑分开,这样才能实现程序的可维护,可复用,可扩展,灵活性。
将来有可能继续增加实例化的对象,如计算器增加开方运算等等,这个时候考虑单独用一个类来做这个创造实例的过程,这就是工厂。
#include <iostream>
#include <string.h>
using namespace std;
//实现计算机抽象类
class AbstractCalculator{
public:
virtual ~AbstractCalculator(){
}
virtual double getResult(){
return 0;
}
double m_Num1;
double m_Num2;
};
//加法类
class ADDCalculator:public AbstractCalculator{
public:
virtual double getResult(){
return m_Num1 + m_Num2;
}
};
//减法类
class SUbCalculator:public AbstractCalculator{
public:
virtual double getResult(){
return m_Num1 - m_Num2;
}
};
//乘法类
class MulCalculator:public AbstractCalculator{
public:
virtual double getResult(){
return m_Num1 * m_Num2;
}
};
//除法类
class DivCalculator:public AbstractCalculator{
public:
virtual double getResult(){
if(m_Num2 == 0){
cout << "errro, num2 must be not zero !!!" << endl;
return 0;
}else{
return m_Num1 / m_Num2;
}
}
};
class OperatorFactory{
public:
AbstractCalculator* creatOperate(string str){
AbstractCalculator *oper = NULL;
if(str == "+"){
oper = new(ADDCalculator);
}else if (str == "-"){
oper= new(SUbCalculator);
}else if (str == "*"){
oper = new(MulCalculator);
}else if (str == "/"){
oper = new(DivCalculator);
}else{
cout << "false!!!!!" << endl;
}
return oper;
}
};
int main(){
AbstractCalculator *oper;
OperatorFactory factory;
oper = factory.creatOperate("+");
oper->m_Num1 = 1999;
oper->m_Num2 = 7234.44;
cout << oper->m_Num1 << " + " << oper->m_Num2 << " = " << oper->getResult() << endl;
return 0;
}