工厂模式:
工厂模式在简单工厂模式的基础上将工厂也抽象为一个抽象工厂,不同的产品放在不同的工厂中取生产(在不同的工厂子类中实例化)
#include <iostream>
#include <string>
#include <time.h>
#include <math.h>
using namespace std;
#define SampleFactory
//抽象运算类
class Operation
{
private:
double _numberA;
double _numberB;
public:
double NumberA(){return _numberA;}
double NumberB(){return _numberB;}
void SetNumberA(double value){_numberA=value;}
void SetNumberB(double value){_numberB=value;}
virtual double GetResult()=0;
};
//加法运算的实现
class OperationAdd:public Operation
{
virtual double GetResult()
{
double result;
result=NumberA()+NumberB();
return result;
}
};
//减法运算的实现
class OperationSub:public Operation
{
virtual double GetResult()
{
double result;
result=NumberA()-NumberB();
return result;
}
};
//乘法运算的实现
class OperationMul:public Operation
{
virtual double GetResult()
{
double result;
result=NumberA()*NumberB();
return result;
}
};
//除法运算的实现
class OperationDiv:public Operation
{
virtual double GetResult()
{
double result;
if(fabs(NumberB())>0.000001)
result=NumberA()/NumberB();
else
result=0;
return result;
}
};
//工厂方法将工厂类抽象出来,建立每个类型自己的工厂,在自己的工厂中实例化对象
class OperationFactory
{
public:
virtual Operation* createOperate()=0;
};
//具体工厂类
class OperationFactoryAdd:public OperationFactory
{
public:
Operation* createOperate()
{
Operation *opr=new OperationAdd;
return opr;
}
};
//具体工厂类
class OperationFactorySub:public OperationFactory
{
public:
Operation* createOperate()
{
Operation *opr=new OperationSub;
return opr;
}
};
//具体工厂类
class OperationFactoryMul:public OperationFactory
{
public:
Operation* createOperate()
{
Operation *opr=new OperationMul;
return opr;
}
};
//具体工厂类
class OperationFactoryDiv:public OperationFactory
{
public:
Operation* createOperate()
{
Operation *opr=new OperationDiv;
return opr;
}
};
#endif
int main()
{
Operation* opr;
OperationFactory* operationadd=new OperationFactoryAdd;
opr=operationadd->createOperate();
opr->SetNumberA(12);
opr->SetNumberB(3);
double result=opr->GetResult();
delete opr;
delete operationadd;
printf ( "%.1f",result );
return 0;
}