設計模式總結綜述

1、前言提要

不是解決任何問題都須要從頭作起算法

每種模式都描述了一類開發中不斷重複出現的問題,以及該問題的解決方案的核心編程

針對接口編程,而不是針對實現編程, 優先使用組合而不是類繼承設計模式

設計應支持變化,有預見性函數

六大設計原則:設計

  • 單一職責原則:There should never be more than one reason for a class to change.
  • 里氏替換原則:If for each object o1 of type S there is an object o2 of type T such that for all programs P defined in terms of T,the behavior of P is unchanged when o1 is substituted for o2 then S is a subtype of T.( 若是對每個類型爲S的對象o1, 都有類型爲T的對象o2, 使得以T定義的全部程序P在全部的對象o1都代換成o2時, 程序P的行爲沒有發生變化, 那麼類型S是類型T的子類型。 )/ Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.( 全部引用基類的地方必須能透明地使用其子類的對象。 )
  • 依賴倒置原則:High level modules should not depend upon low level modules.Both should depend upon abstractions.Abstractions should not depend upon details.Details should depend up(高層模塊不該該依賴低層模塊, 二者都應該依賴其抽象;抽象不該該依賴細節;細節應該依賴抽象。)
  • 接口隔離原則:Clients should not be forced to depend upon interfaces that they don't use.( 客戶端不該該依賴它不須要的接口。 )The dependency of one class to another one should depend on the smallest possible interface.( 類間的依賴關係應該創建在最小的接口上。 )
  • 迪米特法則:也稱爲最少知識原則( Least Knowledge Principle, LKP) 一個對象應該對其餘對象有最少的瞭解。
  • 開閉原則:Software entities like classes,modules and functions should be open for extension but closed for modifications.( 一個軟件實體如類、 模塊和函數應該對擴展開放, 對修改關閉。 )

2、設計模式

一個模式的四要素:代理

  1. 模式名稱
  2. 問題
  3. 解決方案及最佳實踐
  4. 效果

設計模式空間:日誌

N/A 建立型 結構型 行爲型
範圍 工廠方法 適配器類 解釋器、模板方法
對象 抽象工廠、構建者、原型、單例 適配器對象、橋接、Composite、裝飾器、Facade、Flyweight、代理 責任鏈、command、迭代器、mediator、memento、觀察者、state、strategy、訪問者
  • 1-抽象工廠模式:提供一個建立一系列相關或相互依賴對象的藉口,而無需指定它們具體的類
  • 2-適配器模式:將一個類的藉口轉換成客戶但願的另一個接口。適配器模式使得本來因爲接口不兼容而不能一塊兒工做的那些類能夠一塊兒工做
  • 3-橋接模式:將抽象部分和它的實現部分分離,使他們能夠獨立地變化。
  • 4-構建者模式:將一個複雜對象的構建與它的表示分離,使得一樣的構建過程能夠建立不一樣的表示。
  • 5-責任鏈模式:爲解除請求的發送者和接受者之間的耦合,而使多個對象都有機會處理這個請求。將這些對象連成一條鏈,並沿着這條鏈傳遞該請求,直到有一個對象處理它
  • 6-命令模式:將一個請求封裝爲一個對象,從而使你可用不一樣的請求對客戶進行參數化;對請求排隊或記錄請求日誌,以及支持可取消的操做
  • 7-組合模式:將對象組合成樹形結構以表示」總體-部分「的層次結構。組合模式使得客戶對單個對象和複合對象的使用具備一致性
  • 8-裝飾器模式:動態地給一個對象添加一些額外的職責。就擴展功能而言,裝飾器模式比生成子類方式更爲靈活
  • 9-外觀模式:爲子系統的一組接口提供一個一致的界面,外觀模式定義了一個高層接口,這個藉口使得這一子系統更加容易使用
  • 10-工廠方法:定義一個用於建立對象的接口,讓子類決定將哪個類實例化。工廠方法使一個類的實例化延遲到其子類。
  • 11-亨元模式:運用共享技術有效地支持大量細粒度的對象
  • 12-解釋器模式:給定一個語言,定義他的文法的一種表示,並定義一個解釋器,該解釋器使用該表示來解釋語言中的句子
  • 13-迭代器:提供一種方法順序訪問一個聚合對象中各個元素,而又不須要暴露該對象的內部表示
  • 14-中介模式:用一箇中介對象來封裝一系列的對象交互。中介者是各對象不須要顯式地相互引用,從而使其耦合鬆散,並且能夠獨立地改變它們之間的交互
  • 15-備忘錄模式:在不破壞封裝性的前提下,不活一個對象的內部狀態,並在該對象以外保存這個狀態。這樣之後就將該對象恢復到保存的狀態
  • 16-觀察者模式:定義對象間的一種一對多的依賴關係,以便當一個對象的狀態發生改變時,全部依賴於它的對象都獲得同志並自動刷新
  • 17-原型模式:用原型實例指定建立對象的種類,而且經過拷貝這個原型來建立新的對象
  • 18-代理模式:爲其餘對象提供一個代理以控制對這個對象的訪問
  • 19-單例模式:保證一個類僅有一個實例,並提供一個訪問它的全局訪問點
  • 20-狀態模式:容許一個對象在其內部狀態改變時改變它的行爲。對象看起來彷佛修改了它所屬的類
  • 21-策略模式:定義一系列算法,把他們一個個封裝起來,而且使他們能夠相互替換。本模式使得算法的變化可獨立於使用它的客戶
  • 22-模板方法:定義一個操做中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類能夠不改變一個算法的結構便可重定義該算法的某些特定步驟。
  • 23-訪問者模式:表示一個做用於某對象結構中的各元素的操做。它使你能夠在不改變各元素的類的前提下定義做用於這些元素的新操做。

經典設計模式之間的關係:對象

3、設計模式拾遺

https://sourcemaking.com/design-patterns-and-tipsblog

4、如何使用設計模式

選擇設計模式的Check-List:繼承

  • 考慮設計模式是怎樣解決問題的
  • 瀏覽模式的意圖
  • 模式怎樣關聯
  • 研究目的類似的模式
  • 檢查從新設計的緣由
  • 考慮設計中哪些是可變的

怎樣使用設計模式暨有效運用設計模式的步驟

  • 回頭研究結構部分、參與者部分和寫做部分
  • 看代碼示例部分,看看這個模式代碼形式的具體例子
  • 選擇模式參與者的名字,使他們在應用上下文中有意義
  • 定義類
  • 定義模式中專用語應用的操做名稱
  • 實現執行模式中責任和協做的操做

5、忠告

若是沒有必定的項目經驗是理解不了設計模式的。理解了設計模式以後要不斷告誡本身——如無必要,不要過分使用設計模式。

6、參考

相關文章
相關標籤/搜索