設計模式:簡單工廠模式

面向對象思維:抽象、封裝、繼承、多態;
實現代碼複用,減少代碼複製;
實現鬆耦合,減少緊耦合;

簡單工廠模式:採用一個單獨的類,來創建實例化的過程

// 採用簡單工廠模式,實現一個簡單的計算器
// 參考《大話設計模式》
#include <iostream>
#include <exception>
using namespace std;
class Operation
{
public:
	Operation()
	{}
	virtual double getValue(double x, double y) = 0;
};
class Addition : public Operation
{
public:
	Addition()
	{}
	double getValue(double x, double y)
	{
		return x + y;
	}
};

class Substract : public Operation
{
public:
	Substract() 
	{}
	double getValue(double x, double y)
	{
		return x - y;
	}
};

class Multiply : public Operation
{
public:
	Multiply() 
	{}
	double getValue(double x, double y)
	{
		return x *y;
	}
};

class Divide : public Operation
{
public:
	Divide() 
	{}
	double getValue(double x, double y)
	{
		if (y == 0)
		{
			throw  runtime_error("Divide by zero!");
		}
		return x / y;
	}
};

class SimpleFacotry
{
public:
	SimpleFacotry()
	{
	}
	Operation * getOperator(char c)
	{
		switch (c)
		{
			case('+'):
				return  new Addition();
				break;
			case('-'):
				return  new Substract();
				break;
			case('*'):
				return  new Multiply();
				break;
			case('/'):
				return  new Divide();
				break;
			default:
				throw   std::runtime_error("wrong input");
				break;
		}
	}
};

int main()
{
	SimpleFacotry  factory;
	Operation * pAdd = factory.getOperator('+');
	cout << pAdd->getValue(1, 2) << endl;
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章