1、建立型模式:
Singleton:解決的是執行個體化對象的個數的問題,比如抽象工廠中的工廠、對象池等,除了Singleton之外,其他建立型模式解決的都是 new 所帶來的耦合關係。
Abstract Factory:建立一系列相互依賴對象,並能在運行時改變系列。
Factory Method:建立單個對象,在Abstract Factory有使用到。
Prototype:通過拷貝原型來建立新的對象。
Factory Method,Abstract Factory, Builder都需要一個額外的工廠類來負責執行個體化“一邊對象”,而Prototype則是通過原型(一個特殊的工廠類)來複製“易變對象”。
如果遇到“易變類”,起初的設計通常從Factory Method開始,當遇到更多的複雜變化時,再考慮重構為其他三種原廠模式(Factory Method,Abstract Factory, Builder)。
2、結構性模式
Adapter:注重轉換介面,將不吻合的介面適配對象,用於舊代碼複用、類庫遷移等。
Bridge:注重實現抽象和實現的分離,支援對象多維度變化。
Composite:注重統一介面,將“一對多”的關係轉化為“一對一”的關係,屏蔽對象容器內部實現結構,實現對象和對象容器使用的一致性。
Decorator:注重穩定介面,在此前提下為對象擴充功能,實現對象功能的擴充,避免子類膨脹。
Facade:注重簡化介面,屏蔽各子系統的複雜性,提供更高層介面供客戶訪問。
Flyweight:注重保留介面,在內部使用共用技術對Object Storage Service進行最佳化(通過共用大量細粒度對象,提供系統效能)。
Proxy:注重假借介面,通過增加間接代理,實現更多控制,屏蔽複雜性。
3 、行為型模式
Template Method:封裝演算法結構,定義演算法骨架,支援演算法子步驟變化。
Strategy:注重封裝演算法,支援演算法的變化,通過封裝一系列演算法,從而可以隨時獨立於客戶替換演算法。
State:注重封裝與狀態相關的行為,支援狀態的變化,通過封裝對象狀態,從而在其內部狀態改變時改變它的行為。
Memento:注重封裝對象狀態變化,支援狀態儲存、恢複。
Mediator:注重封裝對象間的互動,通過封裝一系列對象之間的複雜互動,使他們不需要顯式相互引用,實現解耦。
Chain of Responsibility:注重封裝對象責任,支援責任的變化,通過動態構建職責鏈,實現交易處理。
Command:注重將請求封裝為對象,支援要求的變化,通過將一組行為抽象為對象,實現行為要求者和行為實現者之間的解耦。
Iterator:注重封裝特定領域變化,支援集合的變化,屏蔽集合對象內部複雜結構,提供客戶程式對它的透明遍曆。
Interpreter:注重封裝特定領域變化,支援領域問題的頻繁變化,將特定領域的問題表達為某種文法規則下的句子,然後構建一個解譯器來解釋這樣的句子,從而達到解決問題的目的。
Observer:注重封裝對象通知,支援通訊對象的變化,實現對象狀態改變,通知依賴它的對象並更新。
Visitor:注重封裝對象操作變化,支援在運行時為類結構添加新的操作,在類階層中,在不改變各類的前提下定義作用於這些類執行個體的新的操作。
正確對待模式:
設計模式建立在對系統變化點的基礎上進行,哪裡有變化,哪裡就應用設計模式。
設計模式應該以演化的方式來獲得,系統的變化點往往是經過不斷演化才能準確定位。
不能為了模式而模式,設計模式是一種軟體設計的軟力量,而非規範標準,不應誇大設計模式的作用。
《完》