簡單工廠 c++

C++設計模式之簡單工廠模式

博客分類: 設計模式
設計模式CC++C#UML

專門定義一個類來負責創建其他類的實例,被創建的實例通常都具有共同的父類。它又稱爲靜態工廠方法模式,屬於類的創建型模式。
  簡單工廠模式的UML類圖

  簡單工廠模式的實質是由一個工廠類根據傳入的參數,動態決定應該創建哪一個產品類(這些產品類繼承自一個父類或接口)的實例。

  該模式中包含的角色及其職責

  工廠(Creator)角色

  簡單工廠模式的核心,它負責實現創建所有實例的內部邏輯。工廠類可以被外界直接調用,創建所需的產品對象。

  抽象(Product)角色

  簡單工廠模式所創建的所有對象的父類,它負責描述所有實例所共有的公共接口。

  具體產品(Concrete Product)角色

  是簡單工廠模式的創建目標,所有創建的對象都是充當這個角色的某個具體類的實例。
  一般來講它是抽象產品類的子類,實現了抽象產品類中定義的所有接口方法。

  簡單工廠模式的特點:

  簡單工廠模式的創建目標,所有創建的對象都是充當這個角色的某個具體類的實例。
  在這個模式中,工廠類是整個模式的關鍵所在。它包含必要的判斷邏輯,能夠根據外界給定的信息,決定究竟應該創建哪個具體類的對象。用戶在使用時可以直接根據工廠類去創建所需的實例,而無需瞭解這些對象是如何創建以及如何組織的。有利於整個軟件體系結構的優化。
  不難發現,簡單工廠模式的缺點也正體現在其工廠類上,由於工廠類集中了所有實例的創建邏輯,所以“高內聚”方面做的並不好。另外,當系統中的具體產品類不斷增多時,可能會出現要求工廠類也要做相應的修改,擴展性並不很好。

實例代碼如下:
Cpp代碼 收藏代碼
#include <iostream>
using namespace std;

//定義抽象類
class CAnimal
{
protected:
int m_weight; //重量
public:
virtual void Cry() = 0;
};

//定義具體類
class CFish : public CAnimal
{
public:
virtual void Cry()
{
cout<<"I am Fish!"<<endl;
}
};

class CBird : public CAnimal
{
public:
virtual void Cry()
{
cout<<"I am Bird!"<<endl;
}
};

//定義工廠類
class CFactory
{
public:
CAnimal* CreateObj(int flag)
{
switch(flag)
{
case 0:
return new CBird();
break;
case 1:
return new CFish();
break;
default:
break;
}
}
};

//測試類
int main(int argc, char* argv[])
{
//定義工廠對象
CFactory factory;
CAnimal* pAnimal;
pAnimal = factory.CreateObj(0);
pAnimal->Cry();
delete pAnimal;

pAnimal = factory.CreateObj(1);
pAnimal->Cry();
delete pAnimal;

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