如下图所示,简单工厂模式(以计算器为例):
1:新建一个抽象类,将getResult方法封装为纯虚函数;
2、由上述抽象类派生出各个实际计算操作的类(加、减、乘、除...);
3、在一个新的类里面用静态函数来产生实际操作的对象,这个类即为工厂类;
4、客户端(使用者)调用工厂类,通过加、减、乘等具体需要的操作来产生相应的对象,进而调用对应的操作:比如通过传入‘+’字符给工厂类的createOperator()方法,产生Add类的实例,并通过该实例的指针op调用Add类里的getResult()方法
程序示例:
#include<iostream>
using namespace std;
class operation {
public:
operation():A(0),B(0){}
virtual ~operation(){ }
void setA(double x){
A = x;
}
void setB(double y){
B = y;
}
double getA(){
return A;
}
double getB(){
return B;
}
virtual double getResult() = 0; //纯虚函数
private:
double A;
double B;
char ch;
};
class Add :public operation {
public:
double getResult(){
return getA() + getB();
}
};
class Sub :public operation {
public:
double getResult(){
return getA() - getB();
}
};
class Mul : public operation{
public:
double getResult(){
return getA()*getB();
}
};
class Div :public operation{
public:
double getResult(){
if (getB() == 0){
cout << "input error" << endl;
return -1;
}
else return getA() / getB();
}
};
class factory{
public:
factory(){ };
~factory(){ };
static operation* createOperator(char c){
operation* op = NULL; //基类指针
switch (c){
case '+':
op = new Add();
break;
case '-':
op = new Sub();
break;
case '*':
op = new Mul();
break;
case '/':
op = new Div();
break;
default:
break;
}
return op;
}
};
int main()
{
double A, B;
char ch;
while (cin >> A >> ch >> B){
operation *op = factory::createOperator(ch); //产生实例
op->setA(A); //动态绑定
op->setB(B); //动态绑定
cout << op->getResult() << endl; //动态绑定
}
}