现在的位置: 首页 > 综合 > 正文

大话设计模式-简单工厂模式

2013年03月31日 ⁄ 综合 ⁄ 共 1286字 ⁄ 字号 评论关闭

#include <iostream>
using namespace std;

template<typename T>
class Operation
{
public:
	T NumberA;
	T NumberB;
	T NumberResult;
	void SetNumberA(T A)
	{
		NumberA=A;
	}
	T GetNumberA()
	{
		return NumberA;
	}
	void SetNumberB(T B)
	{
		NumberB=B;
	}
	T GetNumberB()
	{
		return NumberB;
	}
	virtual T Calculate()=0;
	virtual void OutPut()=0;
};

template<typename T>
class OperationAdd:public Operation<T>
{
public:
	T Calculate()
	{
		NumberResult=NumberA+NumberB;
		return NumberResult;
	}
	void OutPut()
	{
		cout<<GetNumberA()<<"+"<<GetNumberB()<<"="<<NumberResult<<endl;
	}
};

template<typename T>
class OperationSub:public Operation<T>
{
public:
	T Calculate()
	{
		NumberResult=NumberA-NumberB;
		return NumberResult;
	}
	void OutPut()
	{
		cout<<GetNumberA()<<"-"<<GetNumberB()<<"="<<NumberResult<<endl;
	}
};

template<typename T>
class OperationFactory
{
public:
	OperationFactory()
	{
		oper=NULL;
	}
	Operation<T>* oper;
	void ProduceOperation(char ch)
	{
		if(oper!=NULL)
			delete oper;
		switch(ch)
		{
		case '+':
			oper=new OperationAdd<T>;
			break;
		case '-':
			oper=new OperationSub<T>;
			break;
		default:
			break;
		}
	}
};

int main()
{
	OperationFactory<double> operFctory;
	char ch;
	double numberA,numberB;
	do
	{
		cout<<"输入操作符:";
		cin>>ch;
		if(ch=='0')
			break;
		operFctory.ProduceOperation(ch);
		cout<<"输入操作数:";
		cin>>numberA>>numberB;
		operFctory.oper->SetNumberA(numberA);
		operFctory.oper->SetNumberB(numberB);
		operFctory.oper->Calculate();
		operFctory.oper->OutPut();
	}while(1);
	system("pause");
	return 0;
}

抱歉!评论已关闭.