天天看點

Java筆記:工廠模式簡單工廠模式工廠方法模式抽象工廠模式

工廠模式主要是為建立對象提供接口,以便将建立對象的具體過程屏蔽隔離起來,達到提高靈活性的目的。

工廠模式在《java與模式》中分為三類:

1)簡單工廠模式(simple factory):不利于産生系列産品。

2)工廠方法模式(factory method):又稱為多形性工廠。

3)抽象工廠模式(abstract factory):又稱為工具箱,産生産品族,但不利于産生新的産品。

gof在《設計模式》一書中将工廠模式分為兩類:工廠方法模式(factory method)與抽象工廠模式(abstract factory)。将簡單工廠模式(simple factory)看為工廠方法模式的一種特例,兩者歸為一類。

在簡單工廠模式中,可以根據自變量的不同傳回不同類的執行個體。簡單工廠模式專門定義一個類來負責建立其他類的執行個體,被建立的執行個體通常都具有共同的父類。

簡單工廠模式角色:

工廠類

抽象産品

具體産品

簡單工廠模式的優點如下:

工廠類含有必要的判斷邏輯,可以決定在什麼時候建立哪一個産品類的執行個體,用戶端可以免除直接建立産品對象的責任,而僅僅“消費”産品;簡單工廠模式通過這種做法實作了對責任的分割,它提供了專門的工廠類用于建立對象。

用戶端無需知道所建立的具體産品類的類名,隻需要知道具體産品類所對應的參數即可,對于一些複雜的類名,通過簡單工廠模式可以減少使用者的記憶量。

通過引入配置檔案,可以在不修改任何用戶端代碼的情況下更換和增加新的具體産品類,在一定程度上提高了系統的靈活性。

簡單工廠模式的缺點如下:

工廠類中包括了建立産品類的業務邏輯,一旦工廠類不能正常工作,整個系統都要受到影響。

系統擴充困難,一旦添加新産品就需要修改工廠邏輯,在産品類型較多時,有可能造成工廠邏輯過于複雜,不利于系統的擴充和維護。

簡單工廠模式由于使用了靜态工廠方法,造成工廠角色無法形成基于繼承的等級結構。

舉例:

在工廠方法模式中,核心的工廠類不再負責所有的産品的建立,而是将具體建立的工作交給子類去做。

工廠方法模式角色:

抽象工廠:是具體工廠角色必須實作的接口或者必須繼承的父類。

具體工廠:它含有和具體業務邏輯有關的代碼。由應用程式調用以建立對應的具體産品的對象。

抽象産品:它是具體産品繼承的父類或者是實作的接口。

具體産品:具體工廠角色所建立的對象就是此角色的執行個體。

抽象工廠模式提供一個建立一系列或互相依賴的對象的接口,而無需指定它們具體的類。它針對的是有多個産品的等級結構。而工廠方法模式針對的是一個産品的等級結構。