簡單工廠模式的C 實現以及個人理解

2021-10-08 14:29:52 字數 2282 閱讀 7730

目錄前言

簡單工廠模式

模式定義

c++實現方法

模式優缺點

應用場景

簡單工廠模式常見具體應用 拓展

設計模式(design pattern)是一套被反覆使用、多數人知曉的、經過分類編目的、**設計經驗的總結,使用設計模式的目的是為了提高**的可讀性、可維護性和可靠性。

學習簡單工廠模式前,我們需要先弄懂「抽象產品類」、「具體產品類」、「工廠類」

具體產品類:它是簡單工廠模式的建立目標,所有被建立的物件都充當這個角色的某個具體類的例項。每乙個具體產品角色都繼承了抽象產品角色,需要實現在抽象產品中宣告的抽象方法。

抽象產品類:它是工廠類所建立的所有物件的父類,封裝了各種產品物件的公有方法,它的引入將提高系統的靈活性,使得在工廠類中只需定義乙個通用的工廠方法,因為所有建立的具體產品物件都是其子類物件。

工廠類:它是簡單工廠模式的核心,負責實現建立所有產品例項的內部邏輯;工廠類可以被外界直接呼叫,建立所需的產品物件。

比如,以手機為例,手機(phone)是所有不同品牌手機的抽象產品類,他包含了所有手機的共同特徵——能打**、能上網等;而像華為手機(huaweiphone)和小公尺手機(xiaomiphone)都是手機的具體產品類,分別封裝了各自不同的功能和結構;那手機的代加工工廠「富士康(foxconn)」則是生產手機的工廠,根據不同的設計方案和需求完成各種品牌手機的具體組裝任務;最後通過各種渠道銷售給我們這些「客戶端」使用。

定義乙個工廠類,它可以根據引數的不同返回不同具體產品類的例項,被建立的例項通常都具有共同的父類(抽象產品類)。

簡單工廠模式可以分為普通簡單工廠,多方法簡單工廠,靜態方法簡單工廠。

我們將用手機為產品來演示簡單工廠的實現方法:

(1)普通簡單工廠:

#include using namespace std;

enum phonetype

;//手機的抽象產品類

class phone

};//具體產品類:華為手機類

class huaweiphone:public phone

(2)多方法簡單工廠

多方法簡單工廠是對普通工廠模式的改進,在普通工廠模式中,如果傳遞的引數型別出錯,則不能正確建立物件,而多方法簡單工廠模式是提供多個工廠方法,分別建立不同產品類的物件。

//工廠類

class phonefactory

//小公尺手機的生成方法

virtual phone* getxiaomi()

}//客戶端

int main()

else

myphone->getphone();

delete myphone;

delete factory;

system("pause");

return 0;

}

(3)靜態方法簡單工廠

將工廠方法設定為static的,這樣就可以不用建立工廠物件,直接呼叫靜態工廠方法。

//工廠類

class phonefactory

return m_phone;

}};//客戶端

int main()

主要優點有:

主要缺點有:

(1)為什麼需要簡單工廠模式,它有什麼好處?

答:如果不使用簡單工廠模式,我們需要在客戶端的**內建立物件,當需要建立多個相似的物件時,我們的客戶端**的可讀性就會降低,畢竟客戶端**不會像我們這裡的示例一樣簡單。使用簡單工廠模式,將生成物件的任務交給工廠,客戶端只需要「消費」物件。

當需要擴充套件產品的種類時,我們只需要找到產品類的檔案,新增所需的具體產品類,然後在工廠類中新增相應的「生成物件」的**,最後在客戶端中新增「消費物件的**」,這樣就完成了原本很麻煩的擴充套件任務。

簡單工廠模式是不完全遵守「開閉原則」的模式,當有新的具體產品類時就需要修改工廠類中的生成物件的方法。而多方法的簡單工廠模式又改善了這種缺點,不同的物件有不同的生成方法,將原本需要在生成物件的方法中進行生成何種物件的判斷交給客戶端來完成。

工廠模式的好處可以參考這篇部落格《設計模式之factory工廠模式的好處》。

(2)簡單工廠模式只能用於建立物件嗎?

答:其實簡單工廠模式可以靈活應用,參考這篇部落格《c++工作筆記-簡單工廠模式基礎》。

簡單工廠模式 C 實現

如下圖所示,簡單工廠模式 以計算器為例 1 新建乙個抽象類,將getresult方法封裝為純虛函式 2 由上述抽象類派生出各個實際計算操作的類 加 減 乘 除.3 在乙個新的類裡面用靜態函式來產生實際操作的物件,這個類即為工廠類 4 客戶端 使用者 呼叫工廠類,通過加 減 乘等具體需要的操作來產生相...

C 實現簡單工廠模式

一,專案簡介 利用簡單工廠模式完成簡易的計算器,可以實現加減乘除運算。工具 vs2013編譯器,windows平台 二,uml類圖 三,operationfactory class pragma once include operation.h 簡單工廠類 class operationfactor...

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

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