设计模式学习(1) 简单工厂模式

#include <string>
#include <iostream>
using namespace std;
class Operation
{
private:
	float _NumberA;
	float _NumberB;
public:
	float GetNumberA()
	{

		return _NumberA;
	}
	void SetNumberA(float value)
	{
   
         _NumberA = value;
	}
	float GetNumberB()
	{
		return _NumberB;
	}
	void SetNumberB(float value)
	{
		_NumberB = value;
	}
	virtual float GetResult()
	{
		double result = 0;
		return result;
	}

};

class OperationAdd:public Operation//加法
{
public:
	virtual float GetResult()
	{
		double result = 0;
		result = GetNumberA()+GetNumberB();
		return result;
	}
};

class OperationSub:public Operation//减法
{
public:
	virtual float GetResult()
	{
		double result = 0;
		result = GetNumberA()-GetNumberB();
		return result;
	}

};

class OperationMul:public Operation//乘法
{
public:
	virtual float GetResult()
	{
		double result = 0;
		result = GetNumberA() * GetNumberB();
		return result;
	}

};

class OperationDiv:public Operation//除法
{
public:
	virtual float GetResult()
	{
		double result = 0;
		try
		{
	
		if(GetNumberB() == 0)
			throw runtime_error("number is 0");
		else
			result = GetNumberA() / GetNumberB();
		}catch(const runtime_error &e)
		{
			cout<<e.what()<<endl;
		}


		return result;
	}

};



class OperationFactory
{
public:
	static Operation *CreateOperation(char operate)
	{
		Operation *oper = NULL;
		switch(operate)//switch 中的参数只能是char,int,等 不能是对象
		{
		case '+':
			oper = new OperationAdd();
			break;
		case '-':
			oper = new OperationSub();
			break;
		case '*':
			oper = new OperationMul();
			break;
		case '/':
			oper = new OperationDiv();
			break;
		default:
			break;
		}
		return oper;
	}
};



int main()
{
	
		Operation *oper;
		
		char m='/';
		oper = OperationFactory::CreateOperation(m);
		oper->SetNumberA(5);
		oper->SetNumberB(0);
		double result = oper->GetResult();
	   cout<<result;
	

  
	  return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值