C++ 简单工厂模式:
例如用面向对象的方法写一个计算器的控制台程序。
一般我们会先写个运算类作为基类,该类中有个getResult的虚函数。然后再写相应的子类(加、减、乘、除)并多态的实现getResult函数。
在main函数中,当我们选择了那种运算符就初始化一个运算类的对象。
“简单工厂模式”,就是说,到底要实例化谁,将来会不会增加实例化对象,应该考虑一个单独的类来做这个创造实例化的过程,这就是工厂。
简单运算工厂类:
class OperationFactory
{
public:
Operation* createoperation(double num1,double num2,char operate)
{
oper=NULL;
switch(operate)
{
case'+' :
oper=newOperationAdd(num1,num2);
break;
case'-' :
oper=newOperationSub(num1,num2);
break;
case'*' :
oper=newOperationMul(num1,num2);
break;
case'/' :
oper=newOperationDiv(num1,num2);
break;
default:
break;
}
returnoper;
}
~OperationFactory()
{
deleteoper;
}
private:
Operation*oper;
};
简单工厂模式-计算器 完整代码:
#include<iostream>
#include<string>
using namespace std;
class Operation
{
public:
Operation():num1(0),num2(0){}
voidsetnum1(double num1)
{
this->num1=num1;
}
Operation(doublenum1,double num2):num1(num1),num2(num2){}
voidsetnum2(double num2)
{
this->num2=num2;
}
doublegetnum1()
{
returnnum1;
}
doublegetnum2()
{
returnnum2;
}
virtualdouble getResult()
{
return0;
}
protected:
doublenum1;
doublenum2;
};
class OperationAdd: virtual publicOperation
{
public:
OperationAdd(doublenum1,double num2):Operation(num1,num2){}
doublegetResult()
{
doubleresult=0;
result=num1+num2;
returnresult;
}
};
class OperationSub: virtual publicOperation
{
public:
OperationSub(doublenum1,double num2):Operation(num1,num2){}
doublegetResult()
{
returnnum1-num2;
}
};
class OperationMul: virtual publicOperation
{
public:
OperationMul(doublenum1,double num2):Operation(num1,num2){}
doublegetResult()
{
returnnum1*num2;
}
};
class OperationDiv: virtual publicOperation
{
public:
OperationDiv(doublenum1,double num2):Operation(num1,num2){}
doublegetResult()
{
if(num2==0)
{
cout<<"除数不能为0!"<<endl;
return0;
}
returnnum1/num2;
}
};
class OperationFactory
{
public:
Operation* createoperation(double num1,double num2,char operate)
{
oper=NULL;
switch(operate)
{
case'+' :
oper=newOperationAdd(num1,num2);
break;
case'-' :
oper=newOperationSub(num1,num2);
break;
case'*' :
oper=newOperationMul(num1,num2);
break;
case'/' :
oper=newOperationDiv(num1,num2);
break;
default:
break;
}
returnoper;
}
~OperationFactory()
{
deleteoper;
}
private:
Operation*oper;
};
int main()
{
cout<<"请输入进行的运算:+、-、*、/"<<endl;
charoperate;
cin>>operate;
cout<<"请输入两个数值:"<<endl;
doublenum1,num2;
cin>>num1>>num2;
OperationFactoryof;
double result;
result=of.createoperation(num1,num2,operate)->getResult();
cout<<"运算结果为:"<<result<<endl;
return0;
}