點關(guān)注外遇,不迷路注簿;持續(xù)更新Java架構(gòu)相關(guān)技術(shù)及資訊熱文!L隆诡渴!
1.開閉原則
- 定義:一個軟件實體如類,模塊和函數(shù)應(yīng)該對擴展開放菲语,對修改關(guān)閉
-
要點:
- 當(dāng)變更發(fā)生時妄辩,不要直接修改類惑灵,而是通過繼承擴展的方式完成變更
- 用抽象構(gòu)建框架,用實現(xiàn)擴展細節(jié)
- 預(yù)先設(shè)計好抽象
- 優(yōu)點:提高軟件系統(tǒng)的可復(fù)用性及可維護性
- 面向抽象編程眼耀,實現(xiàn)抽象化英支,抽象出業(yè)務(wù)模型
- 提高內(nèi)聚,降低耦合
2.依賴倒置原則
-
定義:高層模塊不應(yīng)該依賴低層模塊哮伟,二者都應(yīng)該依賴其抽象
- 這個設(shè)計原則比較好理解干花,首先高層模塊只接口或者父類,接口或父類不該依賴其派生子類
- 抽象不應(yīng)該依賴細節(jié)楞黄;細節(jié)應(yīng)該依賴抽象池凄。
- 針對接口編程,不要針對實現(xiàn)編程鬼廓。
- 優(yōu)點:可以減少類間的耦合性修赞,提高系統(tǒng)穩(wěn)定性,提高代碼可讀性和可維護性桑阶,可降低修改程序所造成的風(fēng)險
3.單一職責(zé)原則
- 定義:不要存在多余一個導(dǎo)致類變更的原因柏副,就一個類而言,應(yīng)該只存在一個導(dǎo)致其變更的原因蚣录。
- 一個類/接口/方法只負責(zé)一項職責(zé)
- 降低類的復(fù)雜度割择,提高類的可讀性,提高系統(tǒng)的可維護性萎河,降低變更引起的風(fēng)險
4.接口隔離原則
- 用多個專門的接口荔泳,而不是使用單一的總接口,客戶端不應(yīng)該依賴它不需要的接口
- 一個類對一個類的依賴應(yīng)該建立在最小的接口上
- 建立單一接口虐杯,不要建立龐大臃腫的接口
- 盡量細化接口玛歌,接口中的方法盡量少
- 注意適度原則,一定要適度擎椰,否則會造成類爆炸
- 優(yōu)點:符合我們常說的高內(nèi)聚低耦合的設(shè)計思想支子,從而使類具有很好的可讀性,可擴展性和可維護性
5.迪米特法則(最少知道原則)
- 定義:一個對象應(yīng)該對其他對象保持最少的了解达舒。又叫最少知道原則
- 盡量降低類與類之間的耦合
- 降低類之間的耦合
- 強調(diào)只和朋友交流值朋,不和陌生人說話
- 朋友:出現(xiàn)在成員變量,方法的輸入巩搏,輸出參數(shù)中的類稱為成員朋友類昨登,而出現(xiàn)在方法體內(nèi)部的類不屬于朋友類。
- 類與類之間的引用贯底,盡量只是直接關(guān)系的引用丰辣,避免不必要的耦合。
6.里氏替換原則
- 定義:如果對每一個類型為T1的對象o1,都有類型為T2的對象o2笙什,使得以T1定義的所有程序P在所有的對象o1都替換成o2時飘哨,程序P的行為沒有發(fā)生變化,那么類型T2是類型T1的子類型得湘。
- 定義擴展:一個軟件實體如果適用一個父類的話杖玲,那一定適用于其子類顿仇,所有引用父類的地方必須能透明的使用其子類的對象淘正,子類對象能夠替換父類對象,而程序邏輯不變臼闻。
-
引申意義:子類可以擴展父類的功能鸿吆,但不能改變父類原有的功能。
- 含義1:子類可以實現(xiàn)父類的抽象方法述呐,但不能覆蓋父類的非抽象方法
- 含義2:子類中可以增加自己特有的方法
- 含義3:當(dāng)子類的方法重載父類的方法時惩淳,方法的前置條件(即方法的輸入/入?yún)ⅲ┮雀割惙椒ǖ妮斎雲(yún)?shù)更寬松。
- 含義4:當(dāng)子類的方法實現(xiàn)父類的方法時(重寫/重載或?qū)崿F(xiàn)抽象方法)乓搬,方法的后置條件(即方法的輸出/返回值)要比父類更嚴(yán)格或相等思犁。
- 優(yōu)點1:約束繼承泛濫,開閉原則的一種體現(xiàn)进肯。
- 優(yōu)點2:加強程序的健壯性激蹲,同事變更時也可以做到非常好的兼容性,提高程序的維護性江掩、擴展性学辱。降低需求變更時引入的風(fēng)險。
7.合成/復(fù)用原則(組合/復(fù)用原則)
- 定義:盡量適用對象組合/聚合环形,而不是繼承關(guān)系達到軟件復(fù)用的目的
- 聚合has-A和組合contains-A
- 優(yōu)點:可以適用系統(tǒng)更加靈活策泣,降低類與類之間的耦合度,一個類的變化對其他類造成的影響相對較少
- 何時適用合成/聚合抬吟,繼承
- 聚合has-A, 組合contains-A, 繼承 is-A