設計模式學習筆記–設計模式概述
定義
設計模式(Design pattern)是一套被反覆使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是爲了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 毫無疑問,設計模式於己於他人於系統都是多贏的;設計模式使代碼編制真正工程化;設計模式是軟件工程的基石脈絡,如同大廈的結構一樣。
組成要素
設計模式一般包含模式名稱、問題、目的、解決方案、效果等組成要素。其中關鍵要素爲:
模式名稱
方便開發人員之間的交流
問題
模式適用的條件,存在的問題,問題的原因
解決方案
描述了設計模式的組成部分,這些組成部分間的相互關係、各自職責、協作方式,通常通過UML與核心代碼進行描述
效果
描述了模式的優缺點以及使用時應權衡的問題
分類
根據它們的用途分爲:
創建型
創建型模式主要用於描述如何創建對象,將對象的創建和使用分離,在使用對象時無需關心對象的創建細節,從而降低系統的耦合度,讓設計方案更易於修改和擴展。
解決方案三要素:
- 創建什麼
- 由誰創建
- 何時創建
包括:
單例模式(Singleton Pattern)
確保某一個類只有一個示例,而且自行實例化並向整個系統提供這個示例
簡單工廠模式(Simple Factory Pattern)
定義一個工廠類,它可以根據參數的不同返回不同類的實例,被創建的實例通常都具有共同的父類
工廠方法模式(Factory Method Pattern)
定義一個用於創建對象的接口,讓子類決定實例化哪一個類
抽象工廠模式(Abstract Factory Pattern)
提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們具體的類
原型模式(Prototype Pattern)
使用原型實例指定創建對象的種類,並且通過複製這些原型創建新的對象
建造者模式(Builder Pattern)
將一個複雜對象的創建與它的表示分離,使得同樣的構建過程可以創建不同的表示
結構型
如何將現有的類或對象組合在一起形成更加強大的結構。不同的結構型模式從不同的角度來組合類或對象,在儘可能滿足各種面向對象設計原則的同時,爲類或對象的組合提供一系列巧妙的解決方案。
包括:
適配器模式(Adapter Pattern)
將一個接口轉換成客戶希望的另一個接口,使接口不兼容的那些類可以一起工作
橋接模式(Bridge Pattern)
將抽象部分與其實現部分分離,使它們都可以獨立的變化
組合模式(Composite Pattern)
組合多個對象形成樹形結構以表示具有“整體:部分”關係的層次結構
裝飾模式(Decorator Pattern)
動態的給一個對象增加一些額外的職責
外觀模式(Facade Pattern)
外部與一個子系統的通信通過一個統一的外觀對象進行,爲子系統中的一組接口提供一個一致的入口
享元模式(Flyweight Pattern)
運用共享技術有效的支持大量細粒度對象的複用
代理模式 (Proxy Pattern)
給某一對象提供一個代理,並由代理控制對原對象的引用
行爲型
關注系統中對象之間的交互,研究系統在運行時對象之間的相互通信與協作,進一步明確對象的職責。行爲模式不僅關注類和對象本身,還關注他們之間的相互作用和職責劃分
包括:
職責鏈模式(Chain of Responsibility Pattern)
避免將請求發送者與接收者耦合在一起,讓多個對象都有機會接收請求,將這些對象連成一條鏈,並且沿着這條鏈傳遞請求,直到有對象處理爲止
命令模式(Command Pattern)
將一個請求封裝爲一個對象,從而可用不用的請求對客戶進行參數化;隊請求隊列或記錄請求日誌,以及支持可撤銷的操作
解釋器模式(Interpreter Pattern)
定義一個語言的文法,並且建立一個解釋器來解釋該語言的句子
迭代器模式(Iterator Pattern)
提供一種方法來訪問聚合對象,而不用暴露這個對象的內部表示
中介者模式(Mediator Pattern)
用一箇中介對象來封裝一系列的對象交互,中介者使個對象不需要顯式的相互引用,從而使其耦合鬆散,而且可以獨立改變它們之間的交互
備忘錄模式(Memento Pattern)
在不破壞封裝的前提下,捕獲一個對象的內部狀態,並在該對象之外保存這個狀態,這樣可以在以後將對象恢復到原先保存的狀態
觀察者模式(Observer Pattern)
定義對象之間的一種一對多依賴關係,使得每當一個對象狀態狀態發生改變時,其相關依賴對象皆得到通知並被自動更新
狀態模式(State Pattern)、
允許一個對象在其內部狀態改變時改變它的行爲,對象看起來似乎修改了它的類
策略模式(Strategy Pattern)
定義一系列算法類,將每一個算法封裝起來,並讓它們可以互相替換,使得算法的變化獨立於使用它的客戶
模板方法模式(Template Method Pattern)
定義一個操作算法的框架,而將一些步驟延遲到子類中,使得子類可以不改變一個算法的結構即可以重定義該算法的某些特定步驟
訪問者模式(Visitor Pattern)
提供一個作用於某對象結構中的各元素的操作表示,使得可以在不改變個元素的類的前提下定義作用於這些元素的新操作