1. 程式人生 > >大愛C++——簡單工廠模式

大愛C++——簡單工廠模式

優點

工廠類是整個模式的關鍵.包含了必要的邏輯判斷,根據外界給定的資訊,決定究竟應該建立哪個具體類的物件.通過使用工廠類,外界可以從直接建立具體產品物件的尷尬局面擺脫出來,僅僅需要負責"消費"物件就可以了。而不必管這些物件究竟如何建立及如何組織的.明確了各自的職責和權利,有利於整個軟體體系結構的優化。

缺點

由於工廠類集中了所有例項的建立邏輯,違反了高內聚責任分配原則,將全部建立邏輯集中到了一個工廠類中;它所能建立的類只能是事先考慮到的,如果需要新增新的類,則就需要改變工廠類了。

當系統中的具體產品類不斷增多時候,可能會出現要求工廠類根據不同條件建立不同例項的需求.這種對條件的判斷和對具體產品型別的判斷交錯在一起,很難避免模組功能的蔓延,對系統的維護和擴充套件非常不利;

這些缺點在工廠方法模式中得到了一定的克服。

使用場景

工廠類負責建立的物件比較少;

客戶只知道傳入工廠類的引數,對於如何建立物件(邏輯)不關心;

由於簡單工廠很容易違反高內聚責任分配原則,因此一般只在很簡單的情況下應用。

程式碼實現:

#include <iostream>
#include <string>
using namespace std;

class Fruit
{
public:
	virtual void getFruit()
	{
		cout << "Fruit:getFruit" << endl;
	}
};

class Apple :public Fruit
{
public:
	virtual void getFruit()
	{
		cout << "Apple:getFruit" << endl;
	}
};

class Banana :public Fruit
{
public:
	virtual void getFruit()
	{
		cout << "Banana:getFruit" << endl;
	}
};

class Pear :public Fruit
{
public:
	virtual void getFruit()
	{
		cout << "Pear:getFruit" << endl;
	}
};

class Factor
{
public:
	Fruit *Create(char* name)
	{
		if (strcmp(name, "Pear") == 0)
		{
			return new Pear;
		}
		else if (strcmp(name, "Banana") == 0)
		{
			return new Banana;
		}
		else
		{
			return new Apple;
		}
		return NULL;
	}
};

int main()
{
	Fruit *fruit = NULL;
	Factor *ff =new Factor();
	fruit=ff->Create("Pear");
	
	fruit->getFruit();
	delete fruit;
	
	return 0;
}
程式碼結果: Pear:getFruit
請按任意鍵繼續. . .