關(guān)鍵字:抽象,單一,最小化
一、單一職責(zé)原則(Single Responsibility Principle 縮寫 SRP):
基本指導(dǎo)原則:兩個完全不一樣的功能不能不應(yīng)該放在同一個類中,一個類中應(yīng)該是一組功能相關(guān)性很高的函數(shù),數(shù)據(jù)的封裝。
具體方式:根據(jù)不同的業(yè)務(wù)功能對類進行相應(yīng)的拆分。
二、開閉原則(Open Close Principle 縮寫 OCP): 軟件中的對象(類,模塊,方法等)應(yīng)該對于擴展是開放的,但是對于修改是封閉的。
1.問題:每次加入新的需求都需要修改原有的代碼,這有可能會引入bug,而且會使原來的代碼邏輯變得越來越復(fù)雜,如何保證原有模塊的正確性
2.解決方案:軟件需要變化時,就比如有新的需求時,我們應(yīng)該盡量通過擴展的方式(接口抽象)來實現(xiàn)變化,而不是通過修改已有的代碼來實現(xiàn)。使得軟件系統(tǒng)更穩(wěn)定,更靈活。
3.面向接口編程:依賴注入 ,接口回調(diào)
java中的接口不能被實例化,但是可以通過接口引用指向一個對象,這樣通過接口來調(diào)用方法可以屏蔽掉具體的方法的實現(xiàn),這是在JAVA編程中經(jīng)常用到的接口回調(diào),也就是經(jīng)常說的面向接口的編程
三、里氏替換(Liskov Substitution Principle 縮寫:LSP):
1.定義:只要父類出現(xiàn)的地方子類就可以出現(xiàn),而且替換為子類不會產(chǎn)生任何錯誤或異常,使用者根本不需要知道是父類還是子類,但是反過來就不行了,所有出現(xiàn)子類的地方父類未必適應(yīng)。
面向?qū)ο蟮娜筇匦裕豪^承,封裝,多態(tài),LSP就是基于繼承,多態(tài)這兩個特性的
2.核心:抽象,而抽象又依賴于繼承這個特性。通過抽象建立規(guī)范,具體的實現(xiàn)在運行時替換掉抽象,保證系統(tǒng)的擴展性、靈活性。
繼承的優(yōu)點:
1.代碼的復(fù)用,減少創(chuàng)建類的成本,每個子類都擁有父類的所有屬性和方法;
2.子類和父類基本相似,但又與父類有區(qū)別
3.提高代碼的可擴展性
繼承的缺點:
1.繼承是侵入性的,只要繼承就必須擁有父類的所有屬性和方法
2.可能造成子類代碼冗余,靈活性降低,因為子類必須擁有父類的屬性和方法
四、依賴倒置原則(Dependence Inversion Principle 縮寫:DIP):依賴抽象而不依賴具體實現(xiàn)
1.高層模塊不應(yīng)該依賴于低層模塊,兩者都應(yīng)該依賴其抽象;
2.抽象(接口或抽象類兩者都是不能直接被實例化的)不應(yīng)該依賴細節(jié)(具體的實現(xiàn)類);
3.細節(jié)應(yīng)該依賴抽象。
4.模塊之間的依賴通過抽象發(fā)生,實現(xiàn)類之間不發(fā)生直接的依賴關(guān)系,其依賴關(guān)系是通過接口或抽象類產(chǎn)生的。
五、接口隔離原則(InterfaceSegregation Principles):ISP
1.定義:客戶端不應(yīng)該依賴他不需要的接口,類之間的依賴應(yīng)建立在最小的接口上
2.接口隔離原則將非常龐大,臃腫的接口拆分成更小和更具體的接口,這樣客戶將會只需要知道他們他們感興趣的方法。
3.接口隔離原則的目的是:讓客戶依賴的接口盡可能低小。
六、迪米特原則(Law of Demeter LOD):最少知識原則
1.定義:一個對象應(yīng)該對其他對象有最少的了解,
2.一個類應(yīng)該對自己需要耦合或者調(diào)用的其他類知道得最少,類的內(nèi)部如何實現(xiàn)與調(diào)用者或者依賴者沒關(guān)系,調(diào)用者只需要知道它需要的方法即可,其他的一概不管。
3.類之間的關(guān)系越密切,耦合度越大,當(dāng)一個類發(fā)生改變時,對另一個類的影響也越大。