目錄簡介工廠方法模式 (factory method)定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其他子類。結構動機
要點例項
creator 角色
concretecreator 角色
client 角色
c++版工廠方法模式
簡單工廠模式 vs. 工廠方法模式
推薦閱讀
參考資料
工廠模式是一種類建立型模式(
可參考設計模式 建立型模式)。
圖-工廠方法模式結構圖
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 ...