工廠模式
工廠模式
實作了建立者和調用者的分離
詳細分離:
-
簡單工廠模式
-
工廠方法模式
-
抽象工廠模式
面向對象設計的基本原則
OCP(開閉原則,Open-Closed
Principle):一個軟體的屍體應對擴充開放,對修改關閉
DIP(依賴倒轉原則, Dependence
Inversion Priciple):要針對接口程式設計,不要針對實作程式設計。針對于抽象而不針對于接口。
LoD(迪米特法則, Law of
Demeter):隻與你直接的朋友通信,而避免和陌生人人通信。
核心本質:
執行個體化對象,用工廠方法代替new操作
将選擇實作類、建立對象統一管理和控制。進而将調用者跟我們的實作類解耦
工廠模式:
簡單工廠模式:
用來生産統一等級結構中的任意産品。(對于增加新的産品,需要修改已有代碼)
工廠方法模式:
用來生産統一登記結構中的固定場頻。(支援增加任意産品)
抽象工廠模式:
用來生産不同産品族的全部産品。(對于增加新的産品無能為力;支援增加産品族)
簡單工廠模式也叫靜态工廠模式,就是工廠類一般是使用靜态方法,通過接收的參數的不同來傳回不同的對象執行個體。
對于增加新産品無能為力,不修改代碼的話,是無法擴充的。
工廠方法模式:
為了避免簡單工廠不滿足OCP開閉原則,通過工廠方法模式解決
工廠方法模式與簡單工廠模式最大的不同在于,簡單工廠模式隻有一個(對于一個項目或者一個獨立子產品而言)工廠類,而工廠方法模式,有一組實作了相同接口的工廠類。
簡單工廠和工廠方法模式比較:
結構複雜度
代碼複雜度
用戶端程式設計複雜度
管理上的複雜度
根據設計理論建議工廠方法模式,但在實際使用中,我們一般都是使用簡單工廠模式
抽象工廠模式:
用來生産不同産品組的全部産品
抽象工廠模式是工廠方法模式的更新版本,在多個業務品種,業務分類時,通過抽象工廠模式産生需要的對象是一種非常好的解決方式。
工廠模式要點:
-
簡單工廠模式(靜态工廠模式)
雖然某種程度不符合設計原則,但實際使用最多
-
工廠方法模式
不修改已有類的前提下,通過增加新的類和工廠類實作擴充
-
抽象工廠模式
不可以增加産品,可以增加産品族
-
應用場景
JDK中Calendar的getInstance()
JDBC中Connection對象的擷取
Hebernate中SessionFactory建立Session
Spring中IOC建立管理bean對象
XML解析時的DocumentBuilderFactory建立解析器對象
反射中Class對象的newInstance()