設計模式6大設計原則 - 程式前沿

文章推薦指數: 80 %
投票人數:10人

設計模式6大設計原則 · 1. 單一職責原則 · 2. 里氏替換原則 · 3. 依賴倒置原則 · 4. 介面隔離原則 · 5. 迪米特法則 · 6. 開閉原則. 程式語言前端開發IOS開發Android開發雲端運算人工智慧伺服器搜尋資料庫軟體開發工具設計模式6大設計原則2018.07.29程式語言it設計模式,java,of設計模式,九大設計模式,協議設計模式,程式碼設計模式,程式設計,設計模式HOME程式語言設計模式6大設計原則Advertisement目錄1.1.單一職責原則1.0.1.定義1.0.2.闡述1.0.3.好處1.0.4.注意2.2.里氏替換原則2.0.1.定義12.0.2.定義22.0.3.闡述2.0.4.里氏替換原則的4層含義3.3.依賴倒置原則3.0.1.定義3.0.2.在Java語言中的表現3.0.3.好處3.0.4.實踐方法3.0.5.結合里氏替換原則4.4.介面隔離原則4.0.1.定義4.0.2.闡述4.0.3.結構隔離原則的4層原則5.5.迪米特法則5.0.1.定義5.0.2.闡述5.0.3.迪米特法則的幾層含義6.6.開閉原則6.0.1.定義6.0.2.闡述6.0.3.重要性6.0.4.實現方法7.總結1.單一職責原則定義單一職責原則(SRP:Singleresponsibilityprinciple)又稱單一功能原則。

它規定一個類應該只有一個發生變化的原因。

闡述單一職責適用於介面、類、方法。

顧名思義,就是要求一個介面或類只有一個職責,它就負責一件事情。

好處類的複雜性降低,有清晰明確的定義提高了可讀性和可維護性使得變更引起的風險降低注意職責沒有一個量化的標準,並且受非常多因素的制約,現實中實現起來會有困難。

2.里氏替換原則定義1如果對每一個型別為S的物件o1,都有型別為T的物件o2,使得以T定義的所有程式P在所有的物件o1都代替成o2時,程式P的行為沒有發生變化,那麼型別S是型別T的子型別。

定義2所有引用基類的地方必須能透明地使用其子類的物件。

闡述通俗點講,只要父類能出現的地方子類就可以出現,而且替換為子類也不會產生任何錯誤或異常,使用者可能根本就不需要知道是父類還是子類。

里氏替換原則的4層含義子類必須完全實現父類的方法子類可以有自己的個性覆蓋或實現父類的方法時輸入引數可以被放大覆寫或實現父類的方法時輸出結果可以被縮小3.依賴倒置原則定義依賴倒置原則(DependenceInversionPrinciple,DIP),包含三層含義:高層模組不應該依賴低層模組,兩者都應該依賴其抽象抽象不應該依賴細節細節應該依賴抽象在Java語言中的表現模組間的依賴通過抽象發生,實現類之間不發生直接的依賴關係,其依賴關係是通過介面或抽象類產生的;介面或抽象類不依賴於實現類;實現類依賴介面或抽象類。

好處採用依賴倒置原則可以減少類間的耦合性,提高系統的穩定性,降低並行開發引起的風險,提高程式碼的可讀性和可維護性。

實踐方法每個類儘量都有介面或抽象類,或者抽象類和介面兩者都具備變數的表面型別儘量是介面或者是抽象類(有些不必,如xxxUtil類等)任何類都不應該從具體類派生,儘量不要覆寫基類的方法結合里氏替換原則介面負責定義public屬性和方法,並且宣告與其他物件的依賴關係,抽象類負責公共構造部分的實現,實現類準確的實現業務邏輯,同時在適當的時候對父類進行細化。

在專案中,大家只要記住是“面向介面程式設計”就基本上抓住了依賴倒置原則的核心。

4.介面隔離原則定義客戶端不應該依賴它不需要的介面類間的依賴關係應該建立在最小的介面上闡述介面隔離原則與單一職責的審視角度是不相同的,單一職責要求的是類和介面職責單一,注重的是職責,這是業務邏輯上的劃分,而介面隔離原則要求介面的方法儘量少。

結構隔離原則的4層原則介面要儘量小介面要高內聚定製服務(單獨為一個個體提供優良的服務)介面設計是有限度的(靈活設計介面粒度大小)5.迪米特法則定義迪米特法則(LawofDemeter,LoD)也稱為最少知識原則(LeastKnowledgePrinciple,LKP):一個物件應該對其他物件有最少的瞭解。

闡述通俗地講,一個類應該對自己需要耦合或呼叫的類知道得最少,你(被耦合或呼叫的類)的內部是如何複雜都和我沒關係,那是你的事情,我就知道你提供的這麼多public方法,我就呼叫這麼多,其他的我一概不關心。

迪米特法則的幾層含義只和朋友交流(出現在成員變數、方法的輸入輸出引數中的類稱為成員朋友類,而出現在方法體內部的類不屬於朋友)朋友間也是有距離的是自己的就是自己的(如果一個方法放在本類中,既不增加類間關係,也對本類不產生負面影響,就放置在本類中)6.開閉原則定義一個軟體實體如類、模組和函式應該對擴充套件開放,對修改關閉。

闡述開閉原則告訴我們應儘量通過擴充套件軟體實體的行為來實現變化,而不是通過修改已有的程式碼來完成變化,它是為軟體實體的未來事件而制定的對現行開發設計進行約束的一個原則。

重要性開閉原則是最基礎的一個原則。

有以下好處:方便測試提高複用性提高可維護性符合物件導向開發技術實現方法抽象約束通過介面或抽象類約束擴充套件,對擴充套件進行邊界限定,不允許出現在介面或抽象類中不存在的public方法引數型別、引用物件儘量使用介面或者抽象類,而不是實現類抽象層儘量保持穩定,一旦確定即不允許修改儘量用配置引數控制程式的行為(如spring和strust的配置檔案)總結六個原則如下:SingleResponsibilityPrinciple:單一職責原則OpenClosedPrinciple:開閉原則LiskovSubstitutionPrinciple:里氏替換原則LawofDemeter:迪米特法則InterfaceSegregationPrinciple:介面隔離原則DependenceInversionPrinciple:依賴倒置原則把這6個原則的首字母(里氏替換原則和迪米特法則的首字母重複,只取一個)聯合起來就是SOLID(solid,穩定的),其代表的含義也就是把這6個原則結合使用的好處:建立穩定、靈活、健壯的設計,而開閉原則又是重中之重,是最基礎的原則,是其他5大原則的精神領袖。

遵循這6大設計原則基本上可以應對大多數變化,適當時候可以進行擴充,但是也並不侷限於這6大設計原則。

Advertisement写评论取消回覆很抱歉,必須登入網站才能發佈留言。

近期文章Spark入門(一)用SparkShell初嘗Spark滋味2019.12.08Spark入門(二)如何用Idea運行我們的Spark項目2019.12.08Spark入門(三)Spark經典的單詞統計2019.12.08Spark入門(四)Spark的map、flatMap、mapToPair2019.12.08Spark入門(五)Spark的reduce和reduceByKey2019.12.08Spark入門(六)Spark的combineByKey、sortBykey2019.12.08Spark入門(七)Spark的intersection、subtract、union和distinct2019.12.08Spark實戰尋找5億次訪問中,訪問次數最多的人2019.12.08Spark實戰搭建我們的Spark分佈式架構2019.12.08【機器學習】深度學習開發環境搭建2019.12.08AdvertisementAdvertisement



請為這篇文章評分?