引言:簡單工廠模式雖然簡單,但存在乙個很嚴重的問題:當系統中需要引入新產品時,由於靜態工廠方法通過所傳入引數的不同,來建立不同的產品,這必定要修改工廠類的源**(增加乙個新產品類,修改靜態工廠方法內部邏輯),那麼,為了實現增加新產品而不影響已有**,工廠方法模式應運而生。
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這種工廠只能生產雞肉這個系列的產品,而當需求發生變化時簡單工廠模式就無法應對了。例如 我再一...