摘要:引申意義子類可以擴展父類的功能,但不能改變父類原有的功能。含義當子類的方法實現父類的方法時重寫重載或實現抽象方法,方法的后置條件即方法的輸出返回值要比父類更嚴格或相等。優點約束繼承泛濫,開閉原則的一種體現。降低需求變更時引入的風險。
0x01.開閉原則
定義:一個軟件實體如類,模塊和函數應該對擴展開放,對修改關閉
要點:
當變更發生時,不要直接修改類,而是通過繼承擴展的方式完成變更
用抽象構建框架,用實現擴展細節
預先設計好抽象
優點:提高軟件系統的可復用性及可維護性
面向抽象編程,實現抽象化,抽象出業務模型
提高內聚,降低耦合
樣例代碼:https://github.com/sigmako/design-pattern/tree/master/design-principle/src/main/java/org/ko/design/principle/openclose
0x02.依賴倒置原則
定義:高層模塊不應該依賴低層模塊,二者都應該依賴其抽象
這個設計原則比較好理解,首先高層模塊只接口或者父類,接口或父類不該依賴其派生子類
抽象不應該依賴細節;細節應該依賴抽象。
針對接口編程,不要針對實現編程。
優點:可以減少類間的耦合性,提高系統穩定性,提高代碼可讀性和可維護性,可降低修改程序所造成的風險
樣例代碼:https://github.com/sigmako/design-pattern/tree/master/design-principle/src/main/java/org/ko/design/principle/dependenceinversion
0x03.單一職責原則定義:不要存在多余一個導致類變更的原因,就一個類而言,應該只存在一個導致其變更的原因。
一個類/接口/方法只負責一項職責
降低類的復雜度,提高類的可讀性,提高系統的可維護性,降低變更引起的風險
樣例代碼:https://github.com/sigmako/design-pattern/tree/master/design-principle/src/main/java/org/ko/design/principle/singleresponsibility
0x04.接口隔離原則用多個專門的接口,而不是使用單一的總接口,客戶端不應該依賴它不需要的接口
一個類對一個類的依賴應該建立在最小的接口上
建立單一接口,不要建立龐大臃腫的接口
盡量細化接口,接口中的方法盡量少
注意適度原則,一定要適度,否則會造成類爆炸
優點:符合我們常說的高內聚低耦合的設計思想,從而使類具有很好的可讀性,可擴展性和可維護性
樣例代碼:https://github.com/sigmako/design-pattern/tree/master/design-principle/src/main/java/org/ko/design/principle/interfacesegregation
0x05.迪米特法則(最少知道原則)定義:一個對象應該對其他對象保持最少的了解。又叫最少知道原則
盡量降低類與類之間的耦合
降低類之間的耦合
強調只和朋友交流,不和陌生人說話
朋友:出現在成員變量,方法的輸入,輸出參數中的類稱為成員朋友類,而出現在方法體內部的類不屬于朋友類。
類與類之間的引用,盡量只是直接關系的引用,避免不必要的耦合。
樣例代碼:https://github.com/sigmako/design-pattern/tree/master/design-principle/src/main/java/org/ko/design/principle/demeter
0x06.里氏替換原則定義:如果對每一個類型為T1的對象o1,都有類型為T2的對象o2,使得以T1定義的所有程序P在所有的對象o1都替換成o2時,程序P的行為沒有發生變化,那么類型T2是類型T1的子類型。
定義擴展:一個軟件實體如果適用一個父類的話,那一定適用于其子類,所有引用父類的地方必須能透明的使用其子類的對象,子類對象能夠替換父類對象,而程序邏輯不變。
引申意義:子類可以擴展父類的功能,但不能改變父類原有的功能。
含義1:子類可以實現父類的抽象方法,但不能覆蓋父類的非抽象方法
含義2:子類中可以增加自己特有的方法
含義3:當子類的方法重載父類的方法時,方法的前置條件(即方法的輸入/入參)要比父類方法的輸入參數更寬松。
含義4:當子類的方法實現父類的方法時(重寫/重載或實現抽象方法),方法的后置條件(即方法的輸出/返回值)要比父類更嚴格或相等。
優點1:約束繼承泛濫,開閉原則的一種體現。
優點2:加強程序的健壯性,同事變更時也可以做到非常好的兼容性,提高程序的維護性、擴展性。降低需求變更時引入的風險。
樣例代碼:https://github.com/sigmako/design-pattern/tree/master/design-principle/src/main/java/org/ko/design/principle/liskovsubstitution
0x07.合成/復用原則(組合/復用原則)定義:盡量適用對象組合/聚合,而不是繼承關系達到軟件復用的目的
聚合has-A和組合contains-A
優點:可以適用系統更加靈活,降低類與類之間的耦合度,一個類的變化對其他類造成的影響相對較少
何時適用合成/聚合,繼承
聚合has-A, 組合contains-A, 繼承 is-A
樣例代碼:https://github.com/sigmako/design-pattern/tree/master/design-principle/src/main/java/org/ko/design/principle/compositionaggregation
0x08.代碼工程七大設計原則: https://github.com/sigmako/design-pattern/tree/master/design-principle
0x09.參考慕課網設計模式精講: https://coding.imooc.com/class/270.html
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74708.html
摘要:單一職責原則開閉原則里氏替換原則依賴倒置原則接口隔離原則迪米特法則組合聚合復用原則單一職責原則高內聚低耦合定義不要存在多于一個導致類變更的原因。建議接口一定要做到單一職責,類的設計盡量做到只有一個原因引起變化。使用繼承時遵循里氏替換原則。 單一職責原則 開閉原則 里氏替換原則 依賴倒置原則 接口隔離原則 迪米特法則 組合/聚合復用原則 單一職責原則(Single Responsi...
摘要:在我們做系統設計時,經常會設計接口或抽象類,然后由子類來實現抽象方法,這里使用的其實就是里氏替換原則。 1.開閉原則(Open Close Principle/OCP) 定義:一個類、模塊和函數應該對擴展開放,對修改關閉。 開放-封閉原則的意思就是說,你設計的時候,時刻要考慮,盡量讓這個類是足夠好,寫好了就不要去修改了,如果新需求來,我們增加一些類就完事了,原來的代碼能不動則不動。這個...
摘要:我們今天也來做一個萬能遙控器設計模式適配器模式將一個類的接口轉換成客戶希望的另外一個接口。今天要介紹的仍然是創建型設計模式的一種建造者模式。設計模式的理論知識固然重要,但 計算機程序的思維邏輯 (54) - 剖析 Collections - 設計模式 上節我們提到,類 Collections 中大概有兩類功能,第一類是對容器接口對象進行操作,第二類是返回一個容器接口對象,上節我們介紹了...
閱讀 1084·2021-10-08 10:04
閱讀 3523·2021-08-05 10:01
閱讀 2278·2019-08-30 11:04
閱讀 1794·2019-08-29 15:29
閱讀 838·2019-08-29 15:12
閱讀 1670·2019-08-26 12:11
閱讀 3115·2019-08-26 11:33
閱讀 1163·2019-08-26 10:23