目錄
1、單一職責原則
2、黎克特制替換原則
3、依賴倒轉原則
4、介面隔離原則
5、迪公尺特法則
6、開閉原則
7、合成/聚合復用原則
single responsibility principle
應該有且僅有乙個原因引起類的變更。
乙個介面包含了兩個或多個職責,而且這兩個或多個職責的變化不相互影響。
面向介面程式設計,對外公布的是介面而不是實現類。
類的複雜性降低,實現什麼職責都有清晰明確的定義;
可讀性提高,複雜性降低,那當然可讀性提高了;
可維護性提高,那當然了,可讀性提高,那當然更容易維護了;
變更引起的風險降低,變更必不可少,介面要做的好的話,乙個介面修改只對相應的實現類有影響,與其他介面無影響,這個是對專案非常大的幫助。
單一職責使用於介面、類、方法。
介面一定要做到單一職責,類設計盡量只有乙個原因引起變化。
liskov substitution principle lsp
所有引用基類的地方必須能透明的使用其子類的物件。
4層含義,如下:
1、子類必須完全實現父類的方法,在父類出現的地方,子類可以進行替換。
2、子類可以有自己的個性,在子類出現的地方,父類未必可以勝任。
3、覆蓋或實現父類的方法時輸入引數可以被放大,但用於背會被呼叫到。
4、覆蓋或實現父類的方法時輸出結果可以被縮小。
在類中呼叫其他類時務必要使用父類或介面,如果不能使用父類或介面,則說明類的設計已經違背了lsp原則。
可擴充套件性增強
dependence inversion princeple
模組之間依賴通過抽象發生,實現類之間不發生直接的依賴關係,其依賴關係是通過介面或抽象類產生的。
介面或抽象類不依賴實現類
實現類依賴介面或抽象類
一句話總結:面向介面程式設計
採用依賴倒置原則可以減少來之間的耦合性,提供系統的穩定性,降低並行開發引起的風險,提高**的可讀性和可維護性。
物件依賴關係有3種方式類傳遞:
1)建構函式傳遞依賴物件
2)setter方法傳遞依賴物件
3)介面宣告依賴
實踐經驗:
1)每個類盡量都有介面或抽象類,或者抽象類和介面都具備
2)變數的表面型別盡量是介面或者抽象類
3)任何類都不應該從具體類派生
4)盡量不要覆寫基類的方法
如果基類是乙個抽象類,而這個方法已經實現了,子類盡量不要覆寫。
類間依賴的是抽象,覆寫了抽象方法,對依賴的穩定性會有一定的影響。
5)結合黎克特制替換原則使用
黎克特制替換原則:父類出現的地方子類就能出現。
結合本章我們得出了乙個通俗的規則:介面負責定義public屬性和方法,並且宣告與其他物件的依賴關係。
抽象類負責公共構造部分的實現,實現類準確的實現業務邏輯,同時在適當的時候對父類進行細化。
inte***ce segregation principle
建立單一介面,不要建立龐大臃腫介面。介面要盡量細化,介面中的方法要盡量少。
與單一職責原則的區別:單一職責原則要求的是類和介面職責單一,注重的是職責,沒有要求介面的方法減少
介面是設計時對外提供的契約,通過分散定義多個介面,可以預防未來變更擴散,提供系統的靈活性和可維護性。
介面隔離原則和其它設計原則一樣,都是需要花費較多的時間和精力來進行設計和籌畫,但是它帶來了設計的靈活性,可以輕鬆應對需求變更。
介面隔離原則是對介面進行規範約束,包含以下四層含義:
1)介面盡量小。根據介面隔離原則拆分介面時,必須首先滿足單一職責原則。
2)介面要高內聚。高內聚就是提高介面、類、模組的處理能力,減少對外互動,即盡量少公布public方法。
3)定**務。給各個訪問者定**務。
4)介面設計是有限度的。
實踐經驗:
1)乙個介面只服務與乙個子模組或業務邏輯
2)通過業務邏輯壓縮介面中的public方法
3)已經被汙染了的介面,盡量去改,若變更風險較大,則採用介面卡模型進行轉化處理
4)了解環境,拒絕盲從。深入了解業務,最好的介面出自你手。
low of demeter
通俗的講,就是乙個類對自己需要耦合或呼叫的類應該知道最少。
深入理解迪公尺特法則:
1)只和朋友交流。
每個物件都必然會和其他物件有耦合關係,兩個物件之間的耦合就成為朋友關係。
這種關係比如組合、聚合、依賴等。
什麼是朋友類?出現在成員變數、方法的輸入輸出引數中的類被稱為成員朋友類。
2)朋友之間也是有距離的。
迪公尺特法則要求類「小氣」一點,盡量不要對外公布太多的public方法和非靜態的public變數,盡量內斂,多使用private、default、protected等訪問許可權,如果成員變數或方法能加上final關鍵字,就不要讓外部去改變它。
3)自己的就是自己的。
如果乙個方法能放在本類中,就不要放到其他類。
4)謹慎使用serializable。
對擴充套件開放,對修改關閉。簡單來說,只可增加,不可修改。
如果新物件的某些功能在別的已經建立好的物件裡面已經實現,那麼盡量使用別的物件提供的功能,使之成為新物件的一部分,而不要自己再建立。新物件通過向這些物件的委派達到復用已有的功能。
簡而言之,要盡量使用合成/聚合,盡量不適用繼承。
設計模式 6大設計原則
前往目錄 擴充套件時不改變原有 乙個抽象類被多個子類繼承並實現抽象方法,呼叫者取得抽象類物件並呼叫方法,main中對呼叫者傳入不同子物件來實現切換 拓展時加子類即可 能使用父類的地方一定能使用子類,正方形不是長方形。假設長方形設定寬比高小時自增,正方形繼承長方形方法後會死迴圈,因此根據此原則不能使用...
設計模式 6大設計原則
單一職責原則 srp single responsibility principle 優點 建議 介面一定要做到單一職責,類的設計盡量做到只有乙個原因引起變化。定義 所有引用基類的地方必須能透明地使用其子類物件。四層含義 建議 類中呼叫其他類時,務必使用父類或介面 否則說明違背了此原則。若子類不能完...
6大設計原則 23種設計模式
乙個類只負責一項職責,應該僅有乙個引起它變化的原因。優點 子類可以擴充套件父類的功能,但不能改變父類原有的功能。即任何基類可以出現的地方,子類一定可以出現,並且當用子類替換了基類後程式不受影響。含義 要求對抽象進行程式設計,不要對實現進行程式設計。實際程式設計中需要做到 建立單一介面,不要建立龐大臃...