設計模式-六大原則

石涵博-Tom發表於2020-10-26

目錄

前言

單一職責原則:Single Responsibility Principle

裡式代換原則:Liskov Substitution Principle

依賴倒轉原則:Dependence Inversion Principle

介面隔離原則:InterfaceSegregation Principles

迪米特原則:Law of Demeter

開閉原則:Open Close Principle


前言

設計模式六大原則,把這六個原則的首字母聯合起來(兩個 L 算做一個)就是 SOLID (solid,穩定的),其代表的含義就是這六個原則結合使用的好處:建立穩定、靈活、健壯的設計。下面我們來分別看一下這六大設計原則。

單一職責原則:Single Responsibility Principle

定義:一個類只負責一項職責

就一個類而言,僅有一個引起它變化的原因,小編遇到的最大的問題是對職責的定義,什麼是類的職責,以及怎麼劃分類的職責,這需要靠個人經驗界定。

目的:降低類的複雜性,可讀性提高,可維護性提高。

裡式代換原則:Liskov Substitution Principle

定義:子類繼承父類,單獨完全可以執行

任何基類出現的地方,子類一定可以出現。LSP是繼承複用的基石,只有當衍生類可以替換掉基類,軟體單位的功能不受影響時,基類才能真正被複用,而衍生類也能夠在基類的基礎上增加行的行為。

舉例:球類,原本是一種體育用品,他的衍生類有足球、籃球等等,如果衍生類替換了基類的原本方法,如把體育用品改為了食用品(那麼軟體單位的功能受到影響),就不符合歷史代換原則。

目的:對實現抽象化的具體步驟的規範。

依賴倒轉原則:Dependence Inversion Principle

定義:高層模組不應該依賴底層模組,兩個都應該依賴於抽象。抽象不應該依賴於細節,細節應該依賴於抽象

該原則針對介面程式設計,而不是針對實現程式設計,引用一個物件,如果這個物件有底層型別,直接引用底層型別。

舉例:以計算機系統為例,無論主機板、CPU、記憶體、硬體都是針對介面設計的,如果針對實現設計,記憶體就要對應到針對某個品牌的主機板,那麼如果需要換記憶體必須得吧主機板也換掉,不符合設計原則。

目的:降低模組間的耦合度。

介面隔離原則:InterfaceSegregation Principles

定義:一個類對另一個類的依賴應建立在最小的介面上

為每個類建立專用的介面,而不要試圖去建立一個很龐大的介面供所有依賴它的類呼叫,客戶端也不應該依賴它不需要的介面,每一個介面應該是一種角色。

舉例:登陸和註冊屬於使用者模組的兩個介面,比寫成一個介面好。

目的:提高程式設計的靈活性。

注:介面儘量小,但是要有限度。介面太小會造成介面數量過多,是設計複雜化,所以介面要適度。

迪米特原則:Law of Demeter

定義:一個實體應當儘量少的與其他實體之間發生相互作用

迪米特原則也叫”最少知道原則“,一個物件應對其他物件有儘可能少的瞭解(只與你的直接朋友交談,不跟“陌生人”說話)。

舉例:一個公開的public屬性或方法越多,修改時涉及的面也就越大,變更引起的風險也就越大。

目的:降低類之間的耦合,減少對其他類的依賴。

開閉原則:Open Close Principle

定義:對擴充開放,對修改關閉

所有物件導向的核心,在程式需要進行擴充的時候,不能去修改原有的程式碼,實現一個熱插拔的效果(靈活的去除或新增功能,不影響到原有的功能)。

目的:提高程式的可擴充性,易於維護和升級。

相關文章