面向?qū)ο蟮牧笤瓌t

在應(yīng)用開發(fā)過程中,最難的不是完成應(yīng)用的開發(fā)工作,而是在后續(xù)的升級、維護(hù)過程中讓應(yīng)用系統(tǒng)能夠擁抱變化。擁抱變化也就意味著在滿足需求且不破壞系統(tǒng)穩(wěn)定性的前提下保持高可擴(kuò)展性、高內(nèi)聚、低耦合,在經(jīng)歷了各版本的變更之后依然保持清晰、靈活、穩(wěn)定的系統(tǒng)架構(gòu)。為此,我們需要了解并遵循面向?qū)ο罅笤瓌t。

一、單一職責(zé)原則

SRP (Single Responsibility Principle)
定義:就一個類而言,應(yīng)該僅有一個引起它變化的原因。
理解和使用建議:簡單的來說,一個類中應(yīng)該是一組相關(guān)性很高的函數(shù)、數(shù)據(jù)的封裝。如何劃分一個類、一個函數(shù)的職責(zé),每個人都有自己的看法,這需要根據(jù)個人經(jīng)驗、具體的業(yè)務(wù)邏輯而定。但是,它也有一些基本的指導(dǎo)原則,例如,兩個完全不一樣的功能就不應(yīng)該放在同一個類中。一個類中應(yīng)該是一組相關(guān)性很高的函數(shù)、數(shù)據(jù)的封裝。

二、開閉原則

OCP (Open Close Principle)
定義:軟件中的對象(類、模塊、函數(shù)等)應(yīng)該對于擴(kuò)展是開放的,但是對于修改是封閉的。
理解和使用建議:在軟件的生命周期內(nèi),因為變化、升級和維護(hù)等原因需要對軟件原有代碼進(jìn)行修改時,可能會將錯誤引入原本已經(jīng)經(jīng)過測試的舊代碼中,破壞原有系統(tǒng)。因此,當(dāng)軟件需要變化時,我們應(yīng)該盡量通過擴(kuò)展的方式來實現(xiàn)變化,而不是通過修改已有的代碼來實現(xiàn)。當(dāng)然,在現(xiàn)實開發(fā)中也沒有那么理想化的狀況,完全地不用修改原來的代碼,因此,在開發(fā)過程中需要自己結(jié)合具體情況進(jìn)行考量,是通過修改舊代碼還是通過繼承使得軟件系統(tǒng)更加穩(wěn)定,更加靈活,適當(dāng)?shù)臅r候也要修改舊代碼以更方便實現(xiàn)擴(kuò)展。

三、里氏替換原則

SLP (Liskov Substitution Principle)
定義:所有引用基類的地方必須能夠透明地使用其子類的對象。
理解:只要父類能出現(xiàn)的地方子類就可以出現(xiàn),并且替換為子類也不會產(chǎn)生任何錯誤或異常,使用者可能根本就不需要知道是父類還是子類??梢哉f里氏替換原則的核心原理是抽象,抽象又依賴于繼承這個特性。
使用建議:建立抽象,通過抽象建立規(guī)范,具體的實現(xiàn)在運行時替換掉抽象,保證系統(tǒng)的擴(kuò)展性、靈活性。

四、依賴倒置原則

DIP (Dependence Inversion Principle)
定義:指代一種特定的解耦形式,使得高層次的模塊不依賴于低層次模塊的實現(xiàn)細(xì)節(jié)的目的,依賴模塊被顛倒了。
有以下幾個關(guān)鍵點:
(1)高層模塊不應(yīng)該依賴低層模塊,兩者都應(yīng)該依賴其抽象。
(2)抽象不應(yīng)該依賴細(xì)節(jié)。
(3)細(xì)節(jié)應(yīng)該依賴抽象。
理解:在Java語言中,抽象就是指接口或抽象類,兩者都是不能直接被實例化的;細(xì)節(jié)就是實現(xiàn)類,實現(xiàn)接口或繼承抽象類而產(chǎn)生的類就是細(xì)節(jié)。
高層模塊就是調(diào)用端,低層模塊就是具體實現(xiàn)類。所以依賴倒置原則在Java語言中的表現(xiàn)就是:模塊間的依賴通過抽象發(fā)生,實現(xiàn)類之間不發(fā)生直接的依賴關(guān)系,其依賴關(guān)系是通過接口或抽象類發(fā)生的。簡單的說就是要做到“面向接口編程”,這也是面向?qū)ο蟮木柚弧?br> 使用建議:如果類與類直接依賴于細(xì)節(jié),那么它們之間就有直接的耦合,當(dāng)具體實現(xiàn)需要變化時,意味著要同時修改依賴者的代碼,這限制了系統(tǒng)的可擴(kuò)展性,這時候只需要抽象低層次模塊的類即可。常見用法有工廠方法模式。

五、接口隔離原則

ISP(Interface Segregation Principles)
定義:客戶端不應(yīng)該依賴它不需要的接口,類間的依賴關(guān)系應(yīng)該建立在最小的接口上。
理解和使用建議:接口隔離原則將非常龐大、臃腫的接口拆分成更小的和更具體的接口,這樣客戶將會只需要知道他們感興趣的方法。接口隔離原則的目的是系統(tǒng)解開耦合,從而容易重構(gòu)、更改和重新部署。

六、迪米特原則

LOD(Law of Demeter)
定義:一個對象應(yīng)該對其他對象有最少的了解。
理解和使用建議:一個類應(yīng)該對自己需要耦合或調(diào)用的類知道得最少,類的內(nèi)部如何實現(xiàn)和調(diào)用者或者依賴者沒關(guān)系,調(diào)用者或者依賴者只需要知道它所需要的方法即可,其他的可一概不用管。類與類之間的關(guān)系越密切,耦合度越大,當(dāng)一個類發(fā)生改變時,對另一個類的影響也越大。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容