大話設計模式C++版本-01-簡單工廠模式

概念

簡單工廠模式:根據不同的條件,使用一個工廠類來創建不同類的對象的一種設計模式,用來解決創建對象的問題。

應用場景

  1. 有幾個不同的類,且這幾個類有共同的父類;
  2. 在不同的條件下用這幾個類創造不同的對象;

一般步驟

  1. 寫一個抽象類作爲不同條件的幾個類的父類,例如寫一個“操作符類”作爲“加法類”和“減法類”的父類;
    // 僞代碼
    class Operator
    {
    	...
    	virtual double GetResult() = 0;
    }
    
  2. 寫具體的子類,並且繼承前面的抽象類
    // 僞代碼
    class OperatorAdd : public Operator
    {
    	double GetResult(){ ... }
    }
    class OperatorSub : public Operator
    {
    	double GetResult(){ ... }
    }
    	```
    
  3. 寫一個工廠類,根據不同的條件創建對象
    // 僞代碼
    class SimpleFactory
    {
    	...
    	Operator *creatOperation(char cOpe)
    	{
    		Operator *ope = NULL;
    		switch(cOpe)
    		{
    			case '+':
    				ope = new OperatorAdd();
    				break;
    				
    			case '-':
    				ope = new OperatorSub();
    				break;
    		}
    		return ope;
    	}
    }
    

具體實例

// SimpleFactory.cpp
#include <cstdio>
class Operator // 抽象類-計算器類
{
public:
	virtual void GetResult()=0;
	void SetNumA(double numA)
	{
		a = numA;
	}
	void SetNumB(double numB)
	{
		b = numB;
	}
protected:
	double a,b;
};

class OperatorAdd : public Operator //加法器類,繼承計算器類
{
public:
	void GetResult()
	{
		printf("a+b=%lf\n",a+b);
	}
};

class OperatorSub : public Operator // 減法器類,繼承計算器類
{
public:
	void GetResult()
	{
		printf("a-b=%lf\n",a-b);
	}
};

class SimpleFactory// 工廠類,根據不同符號,創建不同的計算器對象
{
public:
	static Operator * creatOperator(char cOpe)
	{
		Operator *ope = NULL;
		switch (cOpe)
		{
			case '+':
				ope = new OperatorAdd();
				break;
			case '-':
				ope = new OperatorSub();
				break;
			default:
				printf("error ope = %c\n",cOpe);
				break;
		}
	}
};

int main()
{
	Operator *ope = NULL;
	ope = SimpleFactory::creatOperator('+');// 創建加法器對象
	ope->SetNumA(1.1);
	ope->SetNumB(2.2);
	ope->GetResult();
	delete ope;
	
	ope = SimpleFactory::creatOperator('-');// 創建減法器對象
	ope->SetNumA(3.3);
	ope->SetNumB(2.2);
	ope->GetResult();
	delete ope;
	
	return 0;
}

參考資料

程傑老師的《大話設計模式》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章