工廠模式提供了一種建立物件的方式。它將建立的過程隱藏了起來,呼叫者只負責獲取,不關心建立的細節。
具體使用場景來說,就是乙個介面類,在不同的場景,需要不同的子類,這個時候就可以使用工廠類,根據提供的引數來返回不同子類的例項。
舉個例子:
使用者說我想要乙個膝上型電腦。
工廠類說,我們這裡有三種電腦:逼格高的,光汙染的,超輕薄的。
使用者想了想說,那就逼格高的吧。
然後工廠類從櫃檯掏出一台macbook遞給使用者。
其實這裡使用者並不關心你返回的具體是哪個子類,他只關心,你給我的子類符合我傳給你的引數。
工廠類便是實現這樣的功能,將需求轉化為具體的例項。當然,多數情況下,需求本身可能就是子類的名稱,比如使用者說,我就想要一台蘋果電腦。
// laptop.h
#pragma once
// 抽象類
class
laptop
#pragma once
#include
"laptop.h"
#include
class
macbook final :
public laptop
;virtual
void
poweron
() override
virtual
void
shutdown
() override
}class
allienware final :
public laptop
;virtual
void
poweron
() override
virtual
void
shutdown
() override
}class
thinkpad final :
public laptop
;virtual
void
poweron
() override
virtual
void
shutdown
() override
}}
// laptopfactory.h
#pragma once
#include
"laptop.h"
enum
class
laptopbrand
//工廠類
class
laptopfactory
// laptopfactory.cpp
#include
"laptopfactory.h"
#include
"laptopimpl.h"
laptop* laptopfactory::
getlaptop
(laptopbrand brand)
case laptopbrand::allienware:
case laptopbrand::thinkpad:
default
:}
#include
"laptopfactory.h"
intmain
(void
)
可以看到,當外界呼叫時,它只看到了兩個類:laptop和laptopfactory。對於laptopfactory如何構造laptop,使用的new還是資源池(一手還是二手的laptop)並不關心。此時就可以使用工廠模式。
該類和建造者類有一定的相似,具體我會在建造者類裡說明。
C 設計模式 工廠模式
可以方便的使用繼承來實現建立方法的多樣性,區別於使用靜態方法定義簡單工廠。工廠方法模式 定義了乙個建立物件的介面,但由於子類決定要例項化的類是哪乙個。工廠方法讓類把例項化推遲到了子類。依賴倒置原則 要依賴抽象,不要依賴具體類 以下指導方針將避免你再oo設計中違反依賴倒置原則 盡量達到這個原則,不一定...
C 設計模式 工廠模式
建立型模式,提供了一種建立物件的最佳方式。在工廠模式中,我能在建立物件時不會對客戶端暴露建立邏輯,並且通過使用乙個公用的介面來指向新建立的物件。我們將建立乙個 shape 介面和實現 shape 介面的實體類。下一步是定義工廠類 shapefactory。factorypatterndemo,我們的...
C 設計模式 工廠模式
目錄 基本概念 及例項 工廠方法模式 factory method 定義乙個用於建立物件的介面,讓字類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類 簡單工廠模式的最大優點在使用者工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態例項化相關的類,對於客戶端來說,去除了具體產品的依賴。工...