設計模式之簡單工廠模式 C 實現

2021-10-12 21:57:06 字數 2558 閱讀 2468

更多設計模式參看: 設計模式之模式概述(模式彙總)(c++實現)

優點:缺點:模式結構

角色**示例

按實際業務場景劃分,工廠模式有 3 種不同的實現方式,分別是簡單工廠模式工廠方法模式抽象工廠模式

把被建立的物件稱為「產品」,把建立產品的物件稱為「工廠」。如果要建立的產品不多,只要乙個工廠類就可以完成,這種模式叫簡單工廠模式

在簡單工廠模式中建立例項的方法通常為靜態(static)方法,因此簡單工廠模式(****** factory pattern)又叫作靜態工廠方法模式(static factory method pattern)。

簡單工廠模式(****** factory pattern):定義乙個工廠類,它可以根據引數的不同返回不同類的例項,被建立的例項通常都具有共同的父類。

主要解決介面選擇的問題。

當你需要什麼,只需要傳入乙個正確的引數,就可以獲取你所需要的物件,而無須知道其建立細節。

在以下情況下可以考慮使用簡單工廠模式:

​ (1) 工廠類負責建立的物件比較少,由於建立的物件較少,不會造成工廠方法中的業務邏輯太過複雜。

​ (2) 客戶端只知道傳入工廠類的引數,對於如何建立物件並不關心。

不同工廠生產不同的產品。比如不同的球類工廠生產不同的球類。

1、日誌記錄器:記錄可能記錄到本地硬碟、系統事件、遠端伺服器等,使用者可以選擇記錄日誌到什麼地方。

2、資料庫訪問,當使用者不知道最後系統採用哪一類資料庫,以及資料庫可能有變化時。

工廠類包含必要的邏輯判斷,可以決定在什麼時候建立哪乙個產品的例項。

客戶端無需知道所建立具體產品的類名,只需知道引數即可。

簡單工廠模式的工廠類單一,負責所有產品的建立,職責過重,一旦異常,整個系統將受影響。且工廠類**會非常臃腫,違背高聚合原則。

系統擴充套件困難,一旦增加新產品不得不修改工廠邏輯,在產品型別較多時,可能造成邏輯過於複雜

簡單工廠模式使用了 static 工廠方法,造成工廠角色無法形成基於繼承的等級結構。

//抽象產品類

class

abstractproduct

;//具體產品類

不同的球類工廠生產不同的球類。

******factory

///定義抽象產品類

class

abstractballproduct

;

//三個具體產品類

//具體產品類basketball

class

basketball

:public abstractballproduct

;void

productname

() override

void

productintroduction

() override};

//具體產品類football

class

football

:public abstractballproduct

;void

productname

() override

void

productintroduction

() override};

//具體產品類volleyball

class

volleyball

:public abstractballproduct

;void

productname

() override

void

productintroduction

() override

};

/// 定義工廠類和工廠方法

個人能力有限,如有錯誤之處或者其他建議,敬請告知歡迎**,謝謝!

設計模式之 簡單工廠模式 C 實現

這篇文章主要介紹 簡單工廠模式 下面是關於汽車廠生產汽車的乙個典型案例。如下 include include include using namespace std abstract product class carbase virtual void printname protected str...

《大話設計模式》C 實現之簡單工廠模式

本篇部落格是本人學習 大話設計模式 之後的乙個總結分享。原書是用c 編寫的偽 此處本人將使用c 語言來實現書中的各種設計模式。由於時間有限,此處僅貼出經過設計模式優化後的 也就是書中的最終版 此處 均為自己編寫,個別借鑑了其他優秀大佬博主的 邏輯,此 僅供學習交流,不做其他商業用途。本模式通過編寫計...

設計模式 簡單工廠模式 C 實現

考慮乙個簡單的軟體應用場景,乙個軟體系統可以提供多個外觀不同的按鈕 如圓形按鈕 矩形按鈕 菱形按鈕等 這些按鈕都源自同乙個基類,不過在繼承基類後不同的子類修改了部分屬性從而使得它們可以呈現不同的外觀,如果我們希望在使用這些按鈕時,不需要知道這些具體按鈕類的名字,只需要知道表示該按鈕類的乙個引數,並提...