嚴格來說,簡單工廠模式不屬於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 定義乙個用於建立物件的介面,讓字類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類 簡單工廠模式的最大優點在使用者工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態例項化相關的類,對於客戶端來說,去除了具體產品的依賴。工...