Java設計模式 工廠方法模式

2021-08-30 08:57:09 字數 1151 閱讀 4974

工廠方法模式是對簡單工廠方法模式的改進,在學習工廠方法模式以前,我們首先來複習一下簡單工廠模式。

簡單工廠模式使用乙個簡單工廠類,裡面有乙個靜態的方法根據傳入的引數動態的建立具體物件,簡單工廠類封裝了建立具體物件的過程,客戶端只需要呼叫簡單工廠類中的靜態工廠方法,傳入引數就可以建立得到自己需要的物件。

看看簡單工廠的模式結構:

factory(簡單工廠類):裡面有乙個靜態方法用於建立具體產品物件。

product(抽象產品類):它是工廠類建立的所有物件的父類,封裝了所有產品的公共方法。

concreteproduct(具體產品角色):它是工廠類建立的目標物件,可以有多個具體產品物件,靜態工廠方法就會根據傳入的引數來動態的建立對應於引數的物件。下圖是結構圖:

但是設想,如果我們要增加乙個concreteproductc,應該怎麼辦?是不是需要建立乙個concreteproductc類,繼承自product類,然後就得修改簡單工廠類中靜態方法,增加乙個switch語句中的case分支了,這樣不就不符合開放-封閉原則了嗎。因此,工廠方法模式就應運而生了,工廠模式為每乙個具體的產品類都建立乙個具體的工廠類,然後為這些具體的工廠類建立乙個工廠父類來定義具體工廠類中的公共方法。下面來看工廠方法的模式結構:

product(抽象產品):和簡單工廠類的product類一樣。

concreteproduct(具體產品類):和簡單工廠類的concreteproduct類也一樣。

factory(抽象工廠類):抽象工廠類是所有具體工廠類的父類,宣告了工廠方法,但是沒有實現。

concretefactory(具體工廠類):它是抽象工廠類的子類,實現了抽象工廠類中定義的工廠方法,返回乙個具體產品類的例項,但是是針對product介面程式設計的,將具體產品向上轉型為抽象產品。

結構圖如下:

下面來回顧下剛才的問題:如果要增加乙個具體產品類怎麼辦?

那就建立乙個具體產品類繼承自factory,然後建立乙個具體工廠類用於建立新的具體產品類的物件,新的具體工廠類繼承自product。這樣就可以不修改**,符合開放—封閉原則。

Java設計模式 工廠方法模式

定義乙個用於建立物件的介面,讓子類決定將哪乙個類例項化。factory method 使乙個類的例項化延遲到其子類。package car inte ce public inte ce icar inte ce package car imple import car inte ce.icar in...

Java設計模式 工廠方法模式

工廠方法模式應用背景 客戶類不關心使用哪個具體的類,只關心介面所提供的功能。建立過程比較複雜,例如需要初始化其他關聯的資源類。介面或者抽象類有許多實現類,客戶 需要編寫大量if else邏輯來決定執行時使用哪個具體的實現類。不希望給客戶程式暴露太多的類的內部結構,這樣做可以降低耦合度。優化效能,比如...

java設計模式 工廠方法模式

簡單工廠模式的應用就是用來建立乙個物件,簡單工廠模式是將所有物件的初始化集於乙個具體的工廠類來實現,這個工廠類負責所有產品的建立,但是這種建立只能建立單一的產品,如簡單工廠模式裡的chickenfactory這種工廠只能生產雞肉這個系列的產品,而當需求發生變化時簡單工廠模式就無法應對了。例如 我再一...