設計模式學習1----工廠模式(計算器)

#include "stdafx.h"
#include <iostream>
using namespace std;
class Operation
{
public:
	double GetNumA(){return m_numberA;}
	double GetNumB(){return m_numberB;}
	void SetNumA(double value){m_numberA = value;}
	void SetNumB(double value){m_numberB = value;}
	virtual double GetResult(){double result = 0; return result;}
private:
	double m_numberA;
	double m_numberB;

};

class OperationAdd : public Operation
{
	virtual double GetResult()
	{
		double result = 0;
		result = GetNumA() + GetNumB();
		return result;
	}
};
class OperationSub : public Operation
{
	virtual double GetResult()
	{
		double result = 0;
		result = GetNumA() - GetNumB();
		return result;
	}
};
class OperationMul : public Operation
{
	virtual double GetResult()
	{
		double result = 0;
		result = GetNumA() * GetNumB();
		return result;
	}
};
class OperationDiv : public Operation
{
	virtual double GetResult()
	{
		double result = 0;

		if (GetNumB() == 0)
		{

		}
		result = GetNumA() / GetNumB();
		return result;
	}
};

// class OperationSqrt : public Operation
// {
// 	virtual double GetResult()
// 	{
// 		double result = 0;
// 		if ()
// 		{
// 		}
// 	}
// };
class OperationFactory
{
public:
	static Operation* CreateOprate(char operate)
	{
		switch(operate)
		{
		case '+':
			return new OperationAdd();
			break;
		case '-':
			return new OperationSub();
			break;
		case '*':
			return new OperationMul();
			break;
		case '/':
			return new OperationDiv();
			break;
		}
		return NULL;
	}
};

int _tmain(int argc, _TCHAR* argv[])
{
	double NumA, NumB;
	char operation;
	cout<<"輸入A:";
	cin>>NumA;
	cout<<"輸入操作符:";
	cin>>operation;
	cout<<"輸入B:";
	cin>>NumB;
	Operation *Oper;
	Oper = OperationFactory::CreateOprate(operation);
	if (!Oper)
	{
		return 0;
	}
	Oper->SetNumA(NumA);
	Oper->SetNumB(NumB);
	cout<<"運算結果:"<<Oper->GetResult()<<endl;
	delete Oper;
	return 0;
}
適用性
在下列情況下可以使用Factory Method模式:
• 當一個類不知道它所必須創建的對象的類的時候。
• 當一個類希望由它的子類來指定它所創建的對象的時候。

• 當類將創建對象的職責委託給多個幫助子類中的某一個,並且你希望將哪一個幫助子類是代理者這一信息局部化的時候。


參考《大話設計模式》

發佈了35 篇原創文章 · 獲贊 3 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章