C 設計模式 工廠方法模式 抽象工廠模式

2021-09-29 10:50:09 字數 1998 閱讀 4467

抽象工廠模式主要有四個關鍵元素:

優點 缺點:產品與工廠對應,所以增加乙個產品必須對應的增加乙個工廠。

工廠模式說明見最後擴充套件

抽象產品

#ifndef product_h

#define product_h

class product ;

virtual void init() = 0;

virtual int number() = 0;

};#endif // product_h

具體產品

#ifndef concrete_product_h

#define concrete_product_h

#include "product.h"

//下面把多個產品寫到一起了,應該分開

class concreteproduct1 : public product

virtual int number() override

};class concreteproduct2 : public product

virtual int number() override

};class concreteproduct3 : public product

virtual int number() override

};#endif // concrete_product_h

抽象工廠

#ifndef creator_h

#define creator_h

#include "product.h"

class creator ;

virtual product *create() = 0;

};#endif // creator_h

具體工廠

#ifndef concrete_creator_h

#define concrete_creator_h

#include "creator.h"

#include "concrete_product.h"

//下面把多個工廠寫到一起了,應該分開

class concretecreator1 : public creator

};class concretecreator2 : public creator

};class concretecreator3 : public creator

};#endif // concrete_creator_h

使用

#include //包含某乙個具體工廠標頭檔案即可

#include "concrete_creator.h"

int main(int argc, char *ar**)

工廠方法模式沒有抽象工廠和具體工廠,只有乙個工廠,其create通過不同的識別符號傳入返回對應產品,一般通過一系列case

靜態方法生成產品,從而避免了工廠類的new。

可以用模板的方式實現乙個靜態方法建立不同產品,在qt裡面有一些靜態工廠方法是傳入字串,根據字串內容決定返回何種產品,比如qstylefactory

延遲初始化(lazy initialization)乙個物件被消費完畢後, 並不立刻釋放, 工廠類保持其初始狀態, 等待再次被使用。

實現方法:工廠類定義乙個map容器, 容納所有產生的物件, 如果在map容器中已經有的物件, 則直接取出返回; 如果沒有, 則根據需要的型別產生乙個物件並放入到map容器中, 以方便下次呼叫。同時還可以通過map限制某種產品的最大例項化數量。

參考qicosmos部落格:c++11實現乙個自動註冊的工廠

原始碼github:cppdesignpattern

coologic 部落格網域名稱已更改,已從 www.techieliang.com 改為

www.coologic.cn,上述鏈結位址受到影響,若需檢視源文請手動修改,多有不便,敬請諒解。

設計模式 工廠模式(工廠方法 抽象工廠)

1 工廠方法模式 factory method 定義乙個用於建立物件的介面,讓子類決定例項化哪個類。工廠方法使乙個類的例項化延遲到其子類。正如建立交通工具,可以通過不同的工廠方法建立所需的物件。類圖 對比 1 工廠方法在產品維度,即類圖中movable方向拓展比較方便,只需增加對應的類及相應的工廠方...

設計模式 工廠方法 抽象工廠模式

在業務邏輯中往往有需要建立物件的需求 如何將這部分邏輯封裝並且使得其能個適應於頻繁的變化呢?簡單工廠模式 將物件建立邏輯封裝隔離在簡單工廠類的方法中。簡單工廠的常見實現方式 1 簡單工廠類以及其建立物件的靜態方法 其客戶可以直接呼叫該類的靜態方法。2 簡單工廠類以及其建立物件的成員方法 其客戶 需要...

設計模式 工廠方法模式 抽象工廠模式

最近擠了擠時間出來看了下設計模式,汗!總算來總結點東東了,最近專案忙得暈頭轉向了啊t.t好了言歸正傳,開始總結。理論定義來一套 設計模式 design patterns 是一套被反覆使用 多數人知曉的 經過分類編目的 設計經驗的總結。使用設計模式是為了可重用 讓 更容易被他人理解 保證 可靠性。設計...