OCP(open close principle)
開閉原則:類辐啄、模塊、函數(shù)等對擴展開放烦租,對修改關(guān)閉豺鼻;
SRP(single responsibility principle)
職責單一原則:有且只有一個原因引起類的變更;
LSP(liskov substitution principle)
里氏替換原則:所有的已用基類的地方必須能透明的使用其子類的對象挨约;
通俗點講:只要父類能出現(xiàn)的地方子類就可以出現(xiàn)味混,而且替換為子類也不產(chǎn)生任何異常錯誤,
反之則不然诫惭。這主要體現(xiàn)在翁锡,我們經(jīng)常使用抽象類/基類做為方法參數(shù),
具體使用哪個子類作為參數(shù)傳入進去夕土,由調(diào)用者決定馆衔。
這條原則包含以下幾個方面:
子類必須完全實現(xiàn)父類的方法
子類可以有自己的個性外觀(屬性)和行為(方法)
覆蓋或者實現(xiàn)父類方法時瘟判,參數(shù)可以被放大。即父類的某個方法參數(shù)為HashMap時角溃,子類參數(shù)可以是HashMap拷获,也可以是Map或者更大
覆蓋或者實現(xiàn)父類的方法時,返回結(jié)果可以被縮小减细。即父類的某個方法返回類型是Map匆瓜,子類可以是Map,也可以是HashMap或者更小未蝌。
DIP(dependence inversion principle)
依賴倒置原則:高層模塊不要依賴低層模塊驮吱,所以依賴都應該是抽象的,抽象不應該依賴于具體細節(jié)而萧吠,具體細節(jié)應該依賴于抽象
底層模塊:不可分割的原子邏輯就是低層模塊
高層模塊:低層模塊的組裝合成后就是高層模塊
抽象:Java中體現(xiàn)為基類糠馆,抽象類,接口怎憋,而不單指抽象類
細節(jié):體現(xiàn)為子類又碌,實現(xiàn)類
通俗點講,該原則包含以下幾點要素:
模塊間的依賴應該通過抽象發(fā)生绊袋,具體實現(xiàn)類之間不應該建立依賴關(guān)系
接口或者抽象類不依賴于實現(xiàn)類毕匀,否則就失去了抽象的意義
實現(xiàn)類依賴于接口或者抽象類
總結(jié)起來,一句話:”面向接口編程“癌别。
ISP(Interface-Segregation Principle)
接口隔離原則:客戶端不應該依賴它不需要的接口皂岔;類間的依賴應該建立在最小的接口上
通俗點講:使用接口時應該建立單一接口,不要建立臃腫龐大的接口展姐,盡量給調(diào)用者提供專門的接口躁垛,而非多功能接口。
LoD(Low of Demeter)
迪米特法則:又稱最少知識原則(Least Knowledge Principle圾笨, LKP)教馆,一個對象應該對其他對象有最少的了解。
通俗點講:一個類應該對自己需要耦合或者調(diào)用的類知道越少越好擂达,被耦合或者調(diào)用的類內(nèi)部和我沒有關(guān)系土铺,我不需要的東西你就別public了吧。
迪米特法則包含以下幾點要素:
只和朋友類交流:只耦合該耦合的類
朋友間也是有距離的:減少不該public的方法板鬓,向外提供一個簡潔的訪問
自家的方法就自己創(chuàng)建:只要該方法不會增加內(nèi)部的負擔悲敷,也不會增加類間耦合