個人而言我認為工廠模式是應用最為廣泛的一種模式了,工廠模式也屬於建立型模式,一般來說分為:簡單工廠模式、抽象工廠(abstactfactory)模式。這個模式有什麼好處呢?我們可以通過下面這個例子來**:
假設工廠生產一些了很多種產品,並且需要為這些產品設計很多的包裝,每個產品用來展示用各自的包裝設計展示給客戶看。於是幾年前的我可能就會寫出如下的**:
class cproductashow
private:
cshowbase *m_pshow;
release m_releaseshow;
//};
int _tmain(int argc, _tchar* argv)
cproductang1 opnga2(2);
opnga2.showa();
getchar();
return 0;
}
輸出:
可以看出要通過上面的方法,我們引進了外觀設計者這個人(其實他就是乙個產生外觀物件的工廠)--工廠模式在這裡體現出現了!!我們只需要告訴設計師我們需要什麼型別的產品外觀,他就會給我們返回乙個通用介面的外觀設計了,這樣可以比較簡單的實現了自己的產品的新外觀需求了,基本上我們不需要更改productang1們的**,只需要新增設計者的型別就可以了。這邊有乙個需要注意的一點是關於繼承類的釋放,通常是乙個比較容易犯錯誤的地方,容易引起一些記憶體未釋放,這裡我採用的是對函式指標的賦值,使其指向對應的釋放函式就可以避免這樣的問題產生了。
事情發展到了這步好像可以達到我們的需求了,這個時候工廠又來了乙個設計師,他設計的產品相對原來的設計師各有特色,於是客戶有的指定設計師a 設計他們的產品外觀,有的則希望用新來的設計師b 來設計他們要的產品。這樣麻煩有來了,我們又需要去修改productang1的**了 ,悲劇啊
為了一次解決這類問題,我們需要乙個更大的boss(總設計師)來讓設計師們去做對應的事情了,為了減少**的耦合性,我們再次將外觀分開為每個設計師獨有的形式,我們稱這個boss為抽象工廠。
**如下:
// 新的外觀顯示類
showbaseng2.h:
/*
*/
#ifndef __show_type_h__
#define __show_type_h__
class cshowbaseng2;};
class cproductshowbydesa: public cshowbaseng2
;class cproductshowbydesb: public cshowbaseng2
;#endif //__show_type_h__
showbaseng2.cpp:
#include "stdafx.h"
#include "showbaseng2.h"
#include "string"
#include "iostream"
using namespace std;
void cproductshowbydesa::show();};
// 設計師a 的作品
class cdesignera:public cabstractdesignerbase
;// 設計師b 的作品
class cdesignerb:public cabstractdesignerbase
;#endif //__factory_type_h__
designer.cpp:
#include "stdafx.h"
#include "designer.h"
#include "showbaseng2.h"
#include "string"
#include "iostream"
using namespace std;
cabstractdesignerbase::~cabstractdesignerbase()
getchar();
return 0;
}
輸出:
通過總設計師的控制,我們可以比較清楚的將各個外觀分配給產品顯示,提高後期的維護效率,但是顯然這樣也增加了類的個數。
下面展示一下
第乙個想法:
從圖可以看出產品和外觀是耦合在在一起的,具有一定的耦合性。
普通工廠:
可以看出這個時候產品已經和外觀通過乙個base來建立連線了。減少了**的耦合性。
抽象工廠:
我們可以看到:
實際上,
abstractfactory
模式是為建立一組(有多類)相關或依賴的物件提供建立介面,而
factory
模式正如我在相應的文件中分析的是為一類物件提供建立介面。可以說
abstractfactory
是factory
的一種拓展特例吧。
Java設計模式 抽象工廠模式(factory)
目錄目的 應用例項 提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。工廠模式是最常用的設計模式之一。這種型別的設計模式輸出建立型模式,提供了一種建立物件的最佳方式。在工廠模式中建立物件是通過使用乙個共同 的介面來指向新建立的物件。乙個框架或者系統要由多個子工具系列的乙個工具來配置...
設計模式2 工廠模式
定義 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類,工廠方法使乙個類的例項化延遲到其子類。型別 建立型模式 類圖 工廠方法模式 inte ce iproduct class product implements iproduct inte ce ifactory class factory ...
設計模式2 工廠模式
工廠模式分為簡單工廠模式 工廠方法模式 抽象工廠模式。下面將依次介紹各個工廠模式 首先說說簡單工廠模式,我用現實中的汽車工廠舉例子,首先有個汽車類的介面叫做car,裡面有個開車的方法叫做drive 然後有個吉利車的類叫做jili,實現了car的介面,還有個奇瑞車的類叫做qirui,也實現了car的介...