簡說設計模式

  設計模式是一個很重要的內容,接下來將逐步的介紹一下經常使用的23種設計模式及其它的一些設計模式,每個設計模式都配有模板代碼和簡單測試用例方便理解,完整代碼會逐步上傳到碼雲中,連接放上:https://gitee.com/adamjiangwh/GoFhtml

       本篇主要介紹一下設計模式的基本原則,並給出目錄。git

1、什麼是設計模式

       設計模式是一套被反覆使用的、多數人知曉的、通過分類編目的、代碼設計經驗的總結。使用設計模式是爲了重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。編程

2、設計模式的基本原則

  1. 單一職責原則(Single Responsibility Principle,SRP)

       類的職責要單一。就一個類而言,應該僅有一個引發它變化的緣由。
設計模式

       舉個簡單的例子,咱們如今不少時候都直接使用手機拍照,但新聞、時尚雜誌等的拍照使用的是相機。手機其實就至關於把相機耦合到手機中去了,而相機卻只有拍照這一個職責。大多數時候,一件產品簡單一些,職責單一一些,或許是更好的選擇,這就是單一職責原則。
markdown

       若是一個類承擔的職責過多,就等於把這些職責耦合在一塊兒,一個職責的變化可能會削弱或者抑制這個類完成其它職責的能力。測試

  2. 開閉原則(Open Close Principle,OCP)

       軟件實體可擴展,但不可修改。

       就比如「一國兩制」,一個國家有兩種制度,沒有修改原有的管理制度,而是增長了一種新的制度。正所謂對於擴展的開放的,對於更改是封閉的。spa

  3. 依賴倒轉原則(Dependence Inversion Principle,DIP)

       高層模塊不該該依賴底層模塊,兩個都應該依賴抽象;抽象不該該依賴細節,細節應該依賴抽象。後面這句話換個方式說就是針對接口編程,不要對實現編程。設計

       舉個例子,就比如你的電腦,若是CPU、內存、硬盤都須要依賴具體的主板,主板壞了,全部的部件都不能用了,這顯然是不合理的。代理

       換句話說,即誰也不要依賴誰,除了約定的接口,你們均可以靈活自如。htm

  4. 里氏代換原則(Liskov Substitution Principle,LSP)

       子類型必須可以替換掉它們的父類型。

       舉個例子,假如如今父類是鳥類,有個屬性是能夠飛,子類有個企鵝類,那麼很明顯企鵝類不能繼承鳥類,由於鳥類有會飛的屬性,若是子類企鵝類繼承父類鳥類,則企鵝必須會飛。

  5. 接口隔離原則(Interface Segregation Principle,ISP)

       接口儘可能細化,同時接口中的方法儘可能少。

       舉個設計模式之禪中的例子,星探找美女,星探要去找美女,他須要經過一個標準來找,好比能夠分爲外形美女和睦質美女(即兩個接口),這樣無論之後是要氣質美女仍是外形美女,均可以保持接口的穩定。

  6. 迪米特法則(Law of Demeter,LoD)/最少知識原則(Least Knowledge Principle,LKP)

       一個類對本身依賴的類知道的越少越好;一個對象應該對其餘對象有最少的瞭解。

       好比體育老師上課前清點人數,他讓體育委員來替他清點人數,以後再由體育委員告知結果便可,老師自己並無接觸到其餘學生。

       換句話說,每一個類都應該儘可能下降成員的訪問權限,強調了類之間的鬆耦合。

  7. 合成/聚合複用原則(Composite/Aggregate Reuse Principle,CARP)

       儘可能使用合成/聚合,儘可能不要使用類繼承。

       合成表示一種強的「擁有」關係,體現了嚴格的部分與總體的關係,他們的生命週期相同;而聚合表示一種弱的「擁有」關係,體現的是A對象能夠包含B對象,但B對象不是A對象的一部分。

       這裏再舉個簡單的例子,大雁與翅膀是合成關係;而每隻大雁都屬於一個雁羣,即一個雁羣能夠有多隻大雁,因此大雁和雁羣是聚合關係。

3、設計模式的類型

       常見的設計模式有23種,這些模式可分爲三大類:建立型模式、結構型模式、行爲型模式。

       建立型模式提供了一種在建立對象的同時隱藏建立邏輯的方式,而不是使用new運算符直接實例化對象;結構型模式主要關注類和對象的組合;行爲型模式特別關注對象間的通訊。

       下面給出一個目錄,至於擴展的新模式後續有機會會繼續更新。

建立型模式:

結構型模式:

行爲型模式:

相關文章
相關標籤/搜索