設計模式的七大原則

  設計模式(面向對象)有七大原則,分別是:數據庫

  1.開放-封閉原則編程

  2.單一職責原則設計模式

  3.依賴倒轉原則函數

  4.迪米特法則(也稱爲最小知識原則)測試

  5.接口隔離原則設計

  6.合成/聚合複用原則對象

  7.里氏代換原則繼承

開放-封閉原則具備理想主義的色彩,他是面向對象設計的終極目標。其餘幾條則能夠看作是開放-封閉原則的實現方法。設計模式就是實現了這些原則,從而達到了代碼複用,增長可維護性的目的。接口

一.開放-封閉原則開發

  概念:一個軟件實體如類、模塊和函數應該對擴展開放,對修改關閉。模塊應該儘可能在不修改原代碼的狀況下進行擴展。

  在軟件週期內,由於變化、升級和維護等緣由須要對軟件原有代碼進行修改時,可能會給代碼引入錯誤,也可能會使咱們不得不對整個功能進行重構,而且須要原有代碼通過從新測試。當軟件需求變化時,儘可能經過擴展軟件實體的行爲來實現變化,而不是經過修改已有代碼來實現變化。

  開放封閉原則是面向對象設計的核心所在,遵循這個原則能夠帶來面向對象技術所聲稱的巨大好處,也就是可維護、可擴展、可複用、靈活性好。開發人員應該僅對程序中呈現的頻繁變化的那些部分做出抽象,然而,對於應用程序中的每一個部分都刻意的進行抽象一樣不是一個好主意。拒毫不成熟的抽象和抽象自己同樣重要。

  注意事項:

  1.經過接口或者抽象類約束擴展,對擴展進行邊界限定,不容許出如今接口或抽象類中不存在的public方法。

  2.參數類型、引用對象儘可能使用接口或者抽象類,而不是實現類

  3.抽象層儘可能保持穩定,一旦肯定不容許修改。

二.單一職責原則

  概念:就一個類而言,應該僅有一個引發它變化的緣由。

  當咱們在作編程的時候,很天然的回個一個類加上各類各樣的功能。這樣意味着,不管任何需求要來,你都須要更改這個類,這樣實際上是很糟糕的,維護麻煩,複用不可能,也缺少靈活性。若是一個類承擔的職責過多,就等於把這些職責耦合起來,一個職責變化可能會削弱或者抑制這個類完成其餘職責的能力。這種耦合會致使脆弱的設計,當變化發生時,設計會遭到不少意想不到的破壞。

三.依賴倒轉原則

  概念:依賴倒轉原則是程序要依賴於抽象接口,不要依賴於具體實現。簡單的來講就是要求對抽象進行編程,不要對實現進行編程,這樣就下降了客戶與實現模塊的耦合。

  有時候爲了代碼複用,通常會把經常使用的代碼寫成函數或類庫。這樣開發新項目的時候直接用就好了。好比作項目的時候大多要訪問數據庫,因此咱們把訪問數據庫的代碼寫成了函數。每次作項目去調用這些函數。那麼問題來了,咱們要作新項目的時候,發現業務邏輯高層模塊都是同樣的,但客戶卻但願使用不一樣的數據庫或存儲方式,這時就出現了麻煩。咱們但願能再次利用這些高層模塊,可是高層模塊都是與低層的訪問數據庫綁定在一塊兒,沒辦法複用這些高層的模塊。因此不論是高層模塊和底層模塊都應該依賴於抽象,具體一點就是接口或者抽象類,只要接口是穩定的,那麼任何一個更改都不用擔憂。

  注意事項:

  1.高層模塊不該該依賴於低層模塊。兩個都應該依賴抽象。

  2.抽象不該該依賴結節。細節應依賴於抽象。

四.迪米特法則(也稱爲最小知識原則)

  概念:一個軟件實體應當儘量的少與其餘實體發生相互做用。每個軟件單位對其餘軟件單位都只有最少的知識,並且侷限於那些與本單位密切相關的軟件單位。迪米特法則的初衷在於下降類之間的耦合。因爲每一個類儘可能減小對其餘類的依賴,所以,很容易使得系統的功能模塊功能獨立,相互之間不存在(或不多有)依賴關係。迪米特法則不但願類之間創建直接的聯繫。若是有真的須要創建聯繫的,也但願能經過他的友元類來轉達。所以,應用迪米特法則有可能形成一個後果就是:系統中存在大量的中介類,這些類之因此存在徹底是爲了傳遞類之間的相互關係,這在必定程度上增長了系統的複雜度。

五.接口隔離原則

  概念:客戶端不該該依賴他不須要的接口,類間的依賴關係應創建在最小的接口上。

  接口隔離原則的核心定義,不出現臃腫的接口,可是「小」是有限度的,首先就是不能違反單一職責原則。

六.合成/聚合複用原則

  概念:合成/聚合複用原則常常又叫作合成複用原則,就是在一個新的對象裏面使用一些已有的對象,使之成爲新對象的一部分,新的對象經過這些對象的委派達到複用已有功能的目的。他的設計原則是:要儘可能使用合成/聚合,儘可能不要使用繼承。

七.里氏代換原則

  概念:里氏代換原則是面向對象設計的基本原則之一。即任何基類能夠出現的地方,子類必定能夠出現。里氏代換原則是繼承複用的基石,只有當衍生類能夠替換掉基類,軟件單位的功能不受影響時,基類才能被真正複用,而衍生類也可以在積累的基礎上增長新的行爲,里氏代換原則是對「開-閉」原則的補充。實現「開-閉」原則的關鍵步驟就是抽象化。在基類與子類的繼承關係就是抽象化的具體實現,因此里氏代換原則是對實現抽象化的具體步驟的規範。

  當知足繼承的時候,父類確定存在非私有的成員,子類確定是獲得了父類的這些非私有成員(假設,父類的成員所有是私有的,那麼子類沒辦法從父類繼承任何成員,也就不存在繼承的額概念了)。既然子類繼承了父類的這些非私有成員,那麼父類對象也就能夠在子類對象中調用這些非私有成員。因此,子類對象能夠替換父類對象的位置。

  在里氏帶環原則下,當需求有變化時,只需繼承,而別的東西不會改變。因爲里氏代換原則才使得開放封閉稱爲可能。這樣使得子類在父類無需修改就能夠擴展。  

相關文章
相關標籤/搜索