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

2021-08-06 03:45:51 字數 2354 閱讀 9916

考慮乙個簡單的軟體應用場景,乙個軟體系統可以提供多個外觀不同的按鈕(如圓形按鈕、矩形按鈕、菱形按鈕等), 這些按鈕都源自同乙個基類,不過在繼承基類後不同的子類修改了部分屬性從而使得它們可以呈現不同的外觀,如果我們希望在使用這些按鈕時,不需要知道這些具體按鈕類的名字,只需要知道表示該按鈕類的乙個引數,並提供乙個呼叫方便的方法,把該引數傳入方法即可返回乙個相應的按鈕物件,此時,就可以使用簡單工廠模式(****** factory)。

1.模式定義

簡單工廠模式(****** factory pattern):又稱為靜態工廠方法(static factory method)模式,它屬於類建立型模式。在簡單工廠模式中,可以根據引數的不同返回不同類的例項。簡單工廠模式專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。

2.模式結構

簡單工廠模式包含如下角色:

factory:工廠角色

工廠角色負責實現建立所有例項的內部邏輯

product:抽象產品角色

抽象產品角色是所建立的所有物件的父類,負責描述所有例項所共有的公共介面

concreteproduct:具體產品角色

具體產品角色是建立目標,所有建立的物件都充當這個角色的某個具體類的例項。

3.**分析factory.h

#include 

#include "product.h"

using

namespace

std;

class factory

; product* createproduct(string proname);

};

factory.cpp

#include

"factory.h"

#include

"concreteproducta.h"

#include

"concreteproductb.h"

product* factory::createproduct(string proname)

else

if ("b"

== proname)

return

null;

}

4.模式優點簡單工廠的優點:

工廠類含有必要的判斷邏輯,可以決定在什麼時候建立哪乙個產品類的例項,客戶端可以免除直接建立產品物件的責任,而僅僅「消費」產品;簡單工廠模式通過這種做法實現了對責任的分割,它提供了專門的工廠類用於建立物件。

客戶端無須知道所建立的具體產品類的類名,只需要知道具體產品類所對應的引數即可,對於一些複雜的類名,通過簡單工廠模式可以減少使用者的記憶量。

通過引入配置檔案,可以在不修改任何客戶端**的情況下更換和增加新的具體產品類,在一定程度上提高了系統的靈活性。

5.模式缺點

簡單工廠模式的缺點:

由於工廠類集中了所有產品建立邏輯,一旦不能正常工作,整個系統都要受到影響。

使用簡單工廠模式將會增加系統中類的個數,在一定程式上增加了系統的複雜度和理解難度。

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

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

6.總結

建立型模式對類的例項化過程進行了抽象,能夠將物件的建立與物件的使用過程分離。

簡單工廠模式又稱為靜態工廠方法模式,它屬於類建立型模式。在簡單工廠模式中,可以根據引數的不同返回不同類的例項。簡單工廠模式專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。

簡單工廠模式包含三個角色:工廠角色負責實現建立所有例項的內部邏輯;抽象產品角色是所建立的所有物件的父類,負責描述所有例項所共有的公共介面;具體產品角色是建立目標,所有建立的物件都充當這個角色的某個具體類的例項。

簡單工廠模式的要點在於:當你需要什麼,只需要傳入乙個正確的引數,就可以獲取你所需要的物件,而無須知道其建立細節。

簡單工廠模式最大的優點在於實現物件的建立和物件的使用分離,將物件的建立交給專門的工廠類負責,但是其最大的缺點在於工廠類不夠靈活,增加新的具體產品需要修改工廠類的判斷邏輯**,而且產品較多時,工廠方法**將會非常複雜。

簡單工廠模式適用情況包括:工廠類負責建立的物件比較少;客戶端只知道傳入工廠類的引數,對於如何建立物件不關心。

設計模式 簡單工廠 C 實現

簡單工廠方法 定義乙個建立物件的介面,讓子類決定例項化那乙個類。框架定義了和維護物件之間的關係,同時物件的產生也是由框架來負責。場景 1.當乙個類不知道他所必須建立的物件的類的時候 2.當乙個類希望有它的子類指定他所建立的物件的時候。include class itoy class cattoy p...

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

最近讀程杰的 大話設計模式 但是 是c 版的,於是參考書中和網上的若干 編寫設計模式中簡單工廠模式c 實現 簡單工廠模式理論總結如下 1.實質 主要用於建立物件 將乙個具體類的例項化交給乙個靜態工廠方法來執行。簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的例項。核心思想是用乙個工廠來根據輸入的...

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

最近沒事吧就把設計模式上的一些模式用c 來實現一下。實現 如下 用四則運算做演示 include using namespace std class operation operation operation int numbera,int numberb void operation seta i...