Java設計模式 工廠方法模式

2021-09-13 13:46:33 字數 1761 閱讀 9027

引言:簡單工廠模式雖然簡單,但存在乙個很嚴重的問題:當系統中需要引入新產品時,由於靜態工廠方法通過所傳入引數的不同,來建立不同的產品,這必定要修改工廠類的源**(增加乙個新產品類,修改靜態工廠方法內部邏輯),那麼,為了實現增加新產品而不影響已有**,工廠方法模式應運而生。

1.定義

定義乙個用於建立物件的介面,讓子類決定將哪乙個類例項化,同時讓乙個類的例項化延遲到其子類

2.實現功能

工廠方法模式主要解決的問題:實現增加新產品而不影響工廠類源**(抽象工廠類)

3.設計思想

針對不同的產品,提供不同的工廠,系統提供乙個與產品等級結構對應的工廠等級結構,在客戶端中判斷使用哪個工廠類去建立物件

工廠方法模式提供了乙個抽象工廠介面來宣告抽象工廠方法,而由子類來具體實現工廠方法,建立具體的產品物件

工廠方法模式結構如圖所示:

工廠方法模式包括以下4個角色:

(1)project(抽象產品)

它是定義產品的介面,產品物件的公共父類

(2)concreteproduct(具體產品)

它實現了抽象產品介面,某種型別的具體產品由專門的具體工廠建立,具體工廠與具體產品一一對應

(3)factory(抽象工廠):工廠方法模式的核心

在抽象工廠類中,宣告了工廠方法,用於返回乙個產品,所有建立物件的工廠類都必須實現該介面

(4)concretefactory(具體工廠)

它是抽象工廠類的子類,實現了抽象工廠中定義的工廠方法,並可有客戶端呼叫,返回乙個具體產品類的例項

inte***ce book

class thesea implements book

}class thelittleprince implements book

}inte***ce bookfactory

class fictionbook implements bookfactory }

class literbook implements bookfactory

}public class client

public void main(string args)

}

1.工廠方法模式針對每個產品提供乙個工廠類,在客戶端中判斷使用哪個工廠類去建立物件

2.在客戶端**中,只需要關心抽象工廠類即可,不同的具體工廠可以建立不同的產品

3.如果想要增加乙個thelife具體產品類,此時就不需要修改工廠類源**,而是新增乙個具體工廠類介面於抽象工廠類(不可以在現有具體工廠類中修改邏輯)

工廠方法模式是簡單工廠模式的延伸,它繼承了簡單工廠模式的優點,彌補了簡單工廠模式的不足,工廠方法模式是使用頻率最高的設計模式之一

優點:

1.具體工廠方法用來建立客戶所需要的產品,同時還向客戶隱藏了那種具體產品類將被例項化,使用者只需要關心所需產品對應的工廠即可

2.工廠方法模式基於工廠角色和產品角色的多型性設計,它能夠讓工廠可以自主確定建立何種產品物件

3.加入新產品時,不需要修改抽象工廠,抽象產品,客戶端,只要新增乙個具體工廠類和具體產品即可,提公升系統可擴充套件性

缺點:

1.引入了抽象層,增加系統實現難度

2.增加新產品時,需要提供與之對應的具體工廠類,給系統帶來額外開銷

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這種工廠只能生產雞肉這個系列的產品,而當需求發生變化時簡單工廠模式就無法應對了。例如 我再一...