Factory模式(工廠模式)

2021-06-25 19:07:53 字數 1775 閱讀 2584

假設有如下的場景:

賣pizza的, 可以有很多種pizza(cheesepizza, greekpizza, pepperonipizza),我們該如何處理它呢,當然我們可以宣告乙個類,類中建立每乙個種類的pizza。但是這樣有什麼問題嗎?我們沒有把需要改變的部分剝離出來。軟體設計的乙個原則就是「是易於擴充而不是修改」,另乙個是「對介面程式設計而不是對實現程式設計」。

factory模式的兩個最重要的功能:

1)定義建立物件的介面,封裝了物件的建立;

2)使得具體化類的工作延遲到了子類中。

這裡就輪到工廠模式出手了。 工廠模式有三種:

1.2 源**

1

class

pizza 2;

5virtual

~pizza(){};67

virtual

void

makepizza() =0

; 8};9

10class

cheesepizza :

public

pizza

11; 14~

cheesepizza(){};

1516

void

makepizza() 17

20};

2122

class

greekpizza :

public

pizza

23; 26~

greekpizza(){};

2728

void

makepizza()

2932

33};

3435

class

pepperonipizza :

public

pizza

36; 39~

pepperonipizza(){};

4041

void

makepizza()

4245

46};

4748

enum

pizza_type 49;

5455

class

pizzafactory

56; 59~

pizzafactory(){};

6061

static

shared_ptr

<

pizza

>

createpizza(pizza_type pizzatype) 62

74}

75};

測試**

1

int_tmain(

intargc, _tchar

*argv)

2

這樣寫好什麼好處呢?

.靜態工廠方法統一管理物件的建立

靜態工廠方法推遲了產品的例項化。

定義: 通過讓子類決定該建立的物件是什麼,來達到將物件建立的過程封裝的目的。

當然從**的角度就是其實就是把 pizzafactory 抽象出來,用子類來實現。

抽象工廠和工廠方法的組要區別是工廠方法使用繼承來建立物件,而抽象工廠是使用組合。

**實現也就是把如上的pizzafactory類抽象出來。

factory工廠模式

1.factory模式 兩個重要的功能 1 定義建立物件的介面,封裝了物件的建立 2 使得具體化類的工作延遲到了子類中。factory模式僅僅侷限於一類類 就是說product是一類,有乙個共同的基類 如果我們要為不同類的類提供 乙個物件建立的介面,那就要用abstractfactory了。我們經常...

工廠模式Factory

工廠方法模式完全符合設計模式原則,降低了物件之間的耦合度,而且,工廠方法模式依賴於抽象的架構,將例項化的任務交由了子類實現.比如你想要出門,每次出行你都要根據天氣情況選擇出行方式,如果下雨天,就開自己的私家車,如果晴天就出門坐公車。那麼這裡可以抽取出乙個基類出來。車的基類 public abstra...

Factory 工廠模式

工廠模式有3種。以下的示例 都省略了建構函式與析構函式。一 簡單工廠模式 簡單工廠模式就是只有乙個工廠,所有的產品都有該工廠生產。每一種產品都有乙個對應的type。當需要某種產品時,將該產品的type傳給工廠,然後工廠即會返回該產品。這樣意味著工廠內部必須針對type作判斷,也就是使用乙個switc...