C 設計模式 幾種工廠模式

2021-09-26 14:36:00 字數 1959 閱讀 5458

嚴格來說,簡單工廠模式不屬於gof設計模式範圍內,這裡拿來用作比較學習。

簡言之,簡單工廠指的是,有乙個工廠,可以生產不同的產品,產品有乙個抽象類,不同的實際產品類實現抽象類。**如下:

#include

using

namespace std;

// ****** factory

class

car;

class

benz

:public car};

class

bmw:

public car};

class

factory

; car*

createcar

(carbrand type)

return temp;}}

;int

main()

定義了抽象類car,benz與bmw分別繼承實現了car。在工廠類factory內,提供生成兩個類的例項物件的方法,通過條件判斷生成不同的例項。執行結果:

benz

bmw

與簡單工廠模式相比較,工廠方法模式有兩個工廠,每個工廠分別生產各自的產品。所以產品有乙個抽象類,工廠也有乙個抽象類。

// factory method

class

car;

class

benz

:public car};

class

bmw:

public car};

class

factory

;class

factory_a

:public factory};

class

factory_b

:public factory};

intmain()

factory_a工廠只生產benz,而factory_b只生產bmw。結果:

benz

bmw

抽象工廠模式相對於前兩種,有兩個工廠,有兩個產品,兩個產品還有不同的型號,如benz有e級與s級,bmw有5系與7系。兩個工廠分別為benz的工廠,bmw的工廠。

// abstract factory pattern

class

cclass

// c級車

;class

benzeseries

:public cclass // 賓士e級};

class

bmw5series

:public cclass // 寶馬5系};

class

dclass

// d 級車

;class

benzsseries

:public dclass // 賓士s級};

class

bmw7series

:public dclass // 寶馬7系};

class

factory

;class

factory_benz

:public factory // 賓士的工廠,可以生產e級與s級

dclass*

createdclass()

};class

factory_bmw

:public factory // 寶馬的工廠可以生產5系與7系

dclass*

createdclass()

};intmain()

結果:

benz e class

benz s series

bmw 5 series

bmw 7 series

本文**參考了c++工廠模式總結,設計模式之抽象工廠模式(c++)。

C 設計模式 工廠模式

可以方便的使用繼承來實現建立方法的多樣性,區別於使用靜態方法定義簡單工廠。工廠方法模式 定義了乙個建立物件的介面,但由於子類決定要例項化的類是哪乙個。工廠方法讓類把例項化推遲到了子類。依賴倒置原則 要依賴抽象,不要依賴具體類 以下指導方針將避免你再oo設計中違反依賴倒置原則 盡量達到這個原則,不一定...

C 設計模式 工廠模式

建立型模式,提供了一種建立物件的最佳方式。在工廠模式中,我能在建立物件時不會對客戶端暴露建立邏輯,並且通過使用乙個公用的介面來指向新建立的物件。我們將建立乙個 shape 介面和實現 shape 介面的實體類。下一步是定義工廠類 shapefactory。factorypatterndemo,我們的...

C 設計模式 工廠模式

目錄 基本概念 及例項 工廠方法模式 factory method 定義乙個用於建立物件的介面,讓字類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類 簡單工廠模式的最大優點在使用者工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態例項化相關的類,對於客戶端來說,去除了具體產品的依賴。工...