設計模式(C ) 工廠模式

2021-10-06 02:21:18 字數 1881 閱讀 6973

工廠模式提供了一種建立物件的方式。它將建立的過程隱藏了起來,呼叫者只負責獲取,不關心建立的細節。

具體使用場景來說,就是乙個介面類,在不同的場景,需要不同的子類,這個時候就可以使用工廠類,根據提供的引數來返回不同子類的例項。

舉個例子:

使用者說我想要乙個膝上型電腦。

工廠類說,我們這裡有三種電腦:逼格高的,光汙染的,超輕薄的。

使用者想了想說,那就逼格高的吧。

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