設計模式 2 工廠模式(Factory)

2021-06-09 22:24:55 字數 3074 閱讀 5449

個人而言我認為工廠模式是應用最為廣泛的一種模式了,工廠模式也屬於建立型模式,一般來說分為:簡單工廠模式、抽象工廠(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的介...