軟件設計【7】大原則

代碼碼雲倉庫地址:https://gitee.com/dzxmy/design_pattern

一、開閉原則

定義:一個軟件實體如類、模塊和函數應該對擴展開放,對修改關閉。

用抽象構建框架,用實現擴展細節。

優點:提高軟件系統的可複用性及可維護性。

com.dzx.design.principle.openclose 包下代碼:開閉原則

二、依賴倒置原則

定義:高層模塊不應該依賴低層模塊,二者都應該依賴其抽象

抽象不應該依賴細節,細節應該依賴抽象

針對接口編程,不要針對實現編程

優點:可以減少類間的耦合性,提高系統穩定性,提高代碼可讀性和可維護性,可降低修改程序所造成的風險。

com.dzx.design.principle.dependenceinversion 包下代碼:依賴倒置原則

 三、單一職責原則

定義: 不要存在多於一個導致類變更的原因

一個類/接口/方法只負責一項職責

優點:降低類的複雜度,提高類的可讀性,提高系統的可維護性,降低變更引起的風險

com.dzx.design.principle.singleresponsibility  包下代碼:單一職責原則

四、接口隔離原則

定義:用多個專門的接口,而不使用單一的總接口,客戶端不應該依賴它不需要的接口。

一個類對應一個類的依賴應該建立在最小的接口上

建立單一接口,不要建立龐大臃腫的接口

儘量細化接口,接口中的方法儘量少

注意適度原則,一定要適度 

優點:符合我們常說的高內聚低耦合的設計思想, 從而使得類具有很好的可讀性,可擴展性和可維護性。

com.dzx.design.principle.interfacesegregation 包下代碼: 接口隔離原則

五、迪米特原則

定義:一個對象應該對其他對象保持最少的瞭解,又叫最少知道原則。

儘量降低類與類之間的耦合

優點:降低類之間的耦合

強調只和朋友交流,不和陌生人說話

朋友:出現在成員變量,方法的輸入,輸出參數中的類稱爲成員朋友類,而出現在方法體內部的類不屬於朋友類。

com.dzx.design.principle.demeter  包下代碼: 迪米特原則

六、裏式替換法則

定義:如果對每一個類型爲 T1 的對象 o1,都有類型爲 T2 的對象 o2,使得以 T1 定義的所有程序 P 在所有的對象 o1 都替換成 o2 時,程序 P 的行爲沒有發生變化,那麼類型 T2 是類型 T1 的子類型。通過這個定義我們可以引申出來一個定義繼承,T1 是 T2 的父類。裏式替換原則是繼承複用的基石,當子類可以替換父類,並且軟件功能不受影響時,父類才能真正的被複用,子類也可以增加自己新的功能,裏式替換原則是對開閉原則的一個補充,它是對實現抽象化的具體步驟規範。裏式替換原則所表達的含義就是反對子類重寫父類方法的這一含義。

定義擴展:一個軟件實體如果適用一個父類的話,那麼一定適用於其子類,所有引用父類的地方必須能透明的使用其子類的對象,子類對象能夠替換父類對象,而程序邏輯不變。

引申意義:

1. 子類可以擴展父類的功能,但不能改變父類原有的功能。

     含義1:子類可以實現父類的抽象方法,但不能覆蓋父類的非抽象方法。

     含義2:子類可以增加自己特有的方法。

     含義3:當子類的方法重載父類的方法時,方法的前置條件(即方法的輸入/入參)要比父類方法的輸入參數更寬鬆。

     含義4:當子類的方法實現父類的方法時(重寫/重載或實現抽象方法),方法的後置條件(即方法的輸出/返回值)要比父類嚴格或相等。

優點:

     1. 約束繼承氾濫,開閉原則的一種體現。

     2. 加強程序的健壯性,同時變更時也可以做到非常好的兼容性提高程序的可維護性、擴展性。降低需求變更時引入的風險。

 

七、合成(組合)/聚合複用法則

定義:儘量使用對象組合/聚合,而不是繼承關係達到軟件複用的目的。

聚合 has-A和組合contains-A

優點:可以是系統更加靈活,降低類與類之間的耦合度,一個類的變化對其他類造成的影響相對較少。

何時使用合成/聚合、繼承

聚合 has-A 關係

組合contains-A 包含關係

繼承 is-A 父子關係

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章