工廠方法模式

2021-08-17 16:52:21 字數 3543 閱讀 7969

目錄簡介

結構動機

要點例項

creator 角色

concretecreator 角色

client 角色

c++版工廠方法模式

簡單工廠模式 vs. 工廠方法模式

推薦閱讀

參考資料

工廠方法模式 (factory method)定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其他子類。 

工廠模式是一種類建立型模式

可參考設計模式 建立型模式)。

圖-工廠方法模式結構圖

product: 定義產品物件的介面。

abstract 

class product 

concreteproduct: 實現product介面。

class concreteproduct 

extends product 

@override

public 

void use() 

}

creator: 宣告工廠方法,它會返回乙個產品型別的物件creator也可以實現乙個預設的工廠方法factorymethod(),以返回乙個預設的具體產品型別。

inte***ce creator 

concretecreator:覆寫creator中的工廠方法factorymethod()

class concretecreator 

implements creator 

}

測試**

public 

class factorymethodpattern 

}

執行結果

建立 concreteproduct 產品

使用 concreteproduct 產品

當乙個類不知道它所必須建立的物件的類的時候。

當乙個類希望由它的子類來指定它所建立的物件的時候。

當類將建立物件的職責委託給多個幫助子類中的某乙個,並且你希望將是**者的幫助子類的資訊區域性化的時候。

1、工廠模式中,增加一種產品類,就要增加乙個工廠類。

因為每個工廠類只能建立一種產品的例項。

2、工廠模式遵循開放-封閉原則。

工廠模式中,新增一種產品並不需要修改原有類,僅僅是擴充套件。

還是以簡單工廠模式裡的例子來進行說明。

如何實現乙個具有加減乘除基本功能的計算器? 

兩種模式的 product 和 concreteproduct 角色**沒有區別,不再贅述。

差異在於 factory 角色部分,以及客戶端部分,請在**中體會。

//  creator 角色,定義返回產品例項的公共工廠方法

inte***ce operationfactory 

和簡單工廠模式相比,每一種產品都會有乙個具體的工廠類負責生產例項。

//concretecreator 角色,具體實現 creator 中的方法

class addfactory 

implements operationfactory }//

concretecreator 角色,具體實現 creator 中的方法

class subfactory 

implements operationfactory }//

concretecreator 角色,具體實現 creator 中的方法

class mulfactory 

implements operationfactory }//

concretecreator 角色,具體實現 creator 中的方法

class divfactory 

implements operationfactory 

}

與簡單工廠模式中無需關注具體建立不同,工廠模式中需要指定具體工廠,以負責生產具體對應的產品。

//client 角色,需要指定具體工廠,以負責生產具體產品

public 

class factorymethodpattern 

}

以下為乙個c++版的工廠方法模式例子。

假設有兩個檯燈製造工廠,乙個專門生產紅色的燈,乙個專門生產藍色的燈。

在客戶端裡,我們例項化藍燈工廠,來生產乙個藍燈。

」stdafx.h

」#include <

string>

#include 

using 

namespace std;

// product

class light

;

class bluelight : 

public light

void turnoff()

};

class redlight : 

public light

void turnoff()

};

// factory

class factory

;

class bluelightfactory : 

public factory

};

class redlightfactory : 

public factory

};

int main()

view code

簡單工廠模式相比於工廠方法模式

優點:工廠類中包含必要的邏輯判斷,可根據客戶端的選擇條件動態例項化需要的類。對於客戶端來說,去除了對具體產品的依賴。

缺點:違背了開放封閉原則。 每新增乙個新的產品,都需要對原有類進行修改。增加維護成本,且不易於維護。

開發封閉原則:乙個軟體實體如類、模組和函式應該對擴充套件開放,對修改關閉。

本文屬於設計模式系列

簡單工廠模式屬於工廠模式家族,歡迎參考閱讀簡單工廠模式抽象工廠方法模式

《大話設計模式》

《headfirst設計模式》

工廠方法模式 工廠方法模式

工廠方法模式是簡單工廠模式的公升級版,簡單工廠模式不符合設計模式的原則 即 單一職責,開閉原則 優點 職責明確,擴充套件方便 缺點 需要建立多個工廠 實現步驟 1.將工廠通用方法抽取介面 例如 ifactory 2.將產品抽取介面 例如 icar 3.實現各種產品 例如 baomacar,benti...

工廠方法模式 工廠方法模式 二

工廠方法模式是對簡單工廠的進一步抽象和封裝,需要新的類物件時不需要對既有工廠類進行修改,而是增加新的工廠類。工程類可以使用模版進一步封裝,由編譯器來生成 從而減少 編寫工作量。工廠方法的 c 實現01part產品抽象基類class animal virtual void show 0 02part產...

工廠方法模式(一) 簡單工廠方法模式

ps 第二篇學習部落格,堅持就是勝利。繼續設計模式的學習,記錄工廠模式,加深自己的理解。基本結構 abstractproduct 用來定義基本的商品的抽象 public abstract class abstractphoneproduct 用來實現抽象商品,生成各種商品 public class ...