#include <iostream>
#include <string>
using namespace std;
class Operation
{
public:
double numberA,numberB;
virtual double getResult()
{
return 0;
}
};
class addOperation:public Operation
{
double getResult()
{
return numberA+numberB;
}
};
class subOperation:public Operation
{
double getResult()
{
return numberA-numberB;
}
};
class mulOperation:public Operation
{
double getResult()
{
return numberA*numberB;
}
};
class divOperation:public Operation
{
double getResult()
{
return numberA/numberB;
}
};
class operFactory
{
public:
static Operation *createOperation(char c)
{
switch(c)
{
case '+':
return new addOperation;
break;
case '-':
return new subOperation;
break;
case '*':
return new mulOperation;
break;
case '/':
return new divOperation;
break;
}
}
};
int main()
{
Operation *oper=operFactory::createOperation('+');
oper->numberA=9;
oper->numberB=99;
cout<<oper->getResult()<<endl;
return 0;
}
</oper-></string></iostream>
主要用于创建对象。新添加类时,不会影响以前的系统代码。核心思想是用一个工厂来 根据输入的条件产生不同的类,然后根据不同类的 virtual 函数得到不同的结果。
GOOD:适用于不同情况创建不同的类时
BUG:客户端必须要知道基类和工厂类,耦合性差