程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 設計模式的C++實現 3.抽象工廠

設計模式的C++實現 3.抽象工廠

編輯:C++入門知識

設計模式的C++實現 3.抽象工廠


簡單工廠模式和工廠模式 要求 同一類型的產品子類擁有共同的方法,這限制了產品子類的擴展。抽象工廠可以向客戶端提供一個接口,是客戶端在不必指定產品的具體情況下,創建多個產品族中的產品對象。抽象工廠中將同一類的產品子類歸為一類,讓它們繼承同一個抽象子類,將一個抽象子類的具體產品子類視為一組。產品族是指位於不同產品等級結構中,功能相關聯的產品組成的家族。一般位於不同等級結構的相同位置上。每一個產品族中的產品數量與產品等級結構的數量相同。用戶通過工廠以及族來判斷

當用戶使用時,必須知道哪個工廠以及哪個產品族的產品類,即通過組和族的二維坐標來確定具體的產品子類。每個工廠子類負責一族產品,且有一個方法來生成一種類型的產品。

舉個例子說明。對於抽象工廠基類AbstractFactory派生了 3個具體的工廠類Factory1,Factory2,Factory3,則族數為3,即每個抽象產品類有3個具體子類。若有 2 個抽象產品類AbstractProductA,AbstractProductB,即2個組,則工廠類中有2個創建對象的函數createProductA,createProductB。

簡單的實現:

class AbstractProductA{
public:
	virtual void fun() = 0;
	AbstractProductA(){}
	virtual ~AbstractProductA(){}

};
class ProductA_1 : public AbstractProductA{
public:
	virtual void fun(){cout<< "A_1"<

抽象工廠的用處,其原始意義是為了UNIX 和Windows,兩者許多操作是相同的,這些相同的對象如File,Button等,這些東西分別為Windows族和Unix族各有一份,而對File這樣對象的工廠類稱Unixfile和Windowsfile為一組,進行結構化的劃分。

抽象工廠支持不同類型的產品,更加方便的使用同一族中間的不同類型的產品。增加一族產品時,不修改工廠類和產品類的接口,不違背開閉原則。

缺點:結構過於臃腫,即使我只是簡單實現,而3x2,就寫了以上如此多的代碼。如果產品組數變多或族數增加,都會使其難以管理。每次增加一組產品,工廠類和產品類接口都要修改,違背開閉原則。



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved