面向?qū)ο罅笤瓌t

在 程序設(shè)計(jì)領(lǐng)域, SOLID(單一功能、開閉原則、里氏替換、接口隔離以及依賴反轉(zhuǎn))指代了面向?qū)ο缶幊?/strong>和面向?qū)ο笤O(shè)計(jì)的五個(gè)基本原則。

SOLID被典型的應(yīng)用在測試驅(qū)動(dòng)開發(fā)上,并且是敏捷開發(fā)以及自適應(yīng)軟件開發(fā)的基本原則的重要組成部分。

首字母 指代 概念
S 單一功能原則 認(rèn)為對象應(yīng)該僅具有一種單一功能的概念。
O 開閉原則 認(rèn)為“軟件體應(yīng)該是對于擴(kuò)展開放的,但是對于修改封閉的”的概念。
L 里氏替換原則 程序中的對象應(yīng)該是可以在不改變程序正確性的前提下被它的子類所替換的。
I 接口隔離原則 多個(gè)特定客戶端接口要好于一個(gè)寬泛用途的接口。
D 依賴倒置原則 依賴于抽象而不是一個(gè)實(shí)例,依賴注入是該原則的一種實(shí)現(xiàn)。
L 最少知識原則 調(diào)用方盡可能少的了解被調(diào)用方。

1.單一功能原則

單一功能原則(Single Responsibility Principle),簡稱是 SRP。

規(guī)定每個(gè)類都應(yīng)該有一個(gè)單一的功能,并且該功能應(yīng)該由這個(gè)類完全封裝起來。

作者馬丁把功能(職責(zé))定義為:“改變的原因”,并且總結(jié)出一個(gè)類或者模塊應(yīng)該有且只有一個(gè)改變的原因。

2.開閉原則

開閉原則規(guī)定“軟件中的對象(類,模塊,函數(shù)等等)應(yīng)該對于擴(kuò)展是開放的,但是對于修改是封閉的”。

該特性在產(chǎn)品化的環(huán)境中是特別有價(jià)值的,在這種環(huán)境中,改變源代碼需要代碼審查、單元測試以及諸如此類的用以確保產(chǎn)品使用質(zhì)量的過程。遵循這種原則的代碼在擴(kuò)展時(shí)并不發(fā)生改變,因此無需上述的過程。

優(yōu)點(diǎn):
1.增加穩(wěn)定性
2.可擴(kuò)展性高。

3.里氏替換原則

里氏替換原則是對子類型的特別定義。

可以描述為:“子類可以在程序中代替父類”。該原則依賴于繼承、多態(tài)這兩大特性。

優(yōu)點(diǎn):
1.提高代碼的重用性
2.提高代碼的可擴(kuò)展性。

缺點(diǎn):
1.繼承是侵入性的。只要繼承,就必須繼承父類所有的屬性和方法。
2.降低子類自身的靈活性。子類會受到來自父類的屬性和方法的約束。
3.增加耦合性。當(dāng)父類的屬性和方法修改時(shí),必須要考慮子類的修改。

4.接口隔離原則

接口隔離原則(Interface segregation principle, ISP)指明客戶應(yīng)該不依賴于他們不使用的方法。

接口隔離原則(ISP)拆分非常龐大臃腫的接口成為更小更具體的接口,這樣客戶將會只需要知道他們感興趣的方法。這種縮小的接口被稱為角色接口(role interfaces)。

類似于面向?qū)ο笾?strong>高內(nèi)聚性。

接口隔離原則(ISP)的目的系統(tǒng)解開耦合,從而容易重構(gòu),更改和重新部署。

優(yōu)點(diǎn):
1.降低耦合性。
2.隱藏實(shí)現(xiàn)細(xì)節(jié)。
3.提供代碼可讀性。

5.依賴反轉(zhuǎn)原則

依賴反轉(zhuǎn)原則(Dependency inversion principle, DIP)是指一種特定的解耦。

該原則規(guī)定:
1.高層次的模塊不應(yīng)該依賴于低層次的模塊,兩者都依賴于抽象接口。
2.抽象接口不依賴于具體實(shí)現(xiàn)。而具體實(shí)現(xiàn)依賴于抽象接口。

在 Java 語言中,抽象是接口或者抽象類,兩者都是不能直接被實(shí)例化的。
細(xì)節(jié)是實(shí)現(xiàn)類、實(shí)現(xiàn)接口或繼承抽象類而產(chǎn)生的類,其特點(diǎn)是可以直接被實(shí)例化。

依賴倒置原則在 Java 中的體現(xiàn)是:模塊間的依賴通過抽象發(fā)生,實(shí)現(xiàn)類之間沒有直接的依賴關(guān)系,其依賴關(guān)系是通過接口或抽象類產(chǎn)生的。

優(yōu)點(diǎn):
1.耦合性低。
2.提高系統(tǒng)穩(wěn)定性。
3.可擴(kuò)展性好。

補(bǔ)充 迪米特原則

迪米特原則(Least knowledge principle),也被稱為最少知識原則。

一個(gè)類應(yīng)該對自己需要耦合或者調(diào)用的類知道的最少。

有點(diǎn)類似于接口隔離原則中的最少接口原則,接口隔離原則側(cè)重于被處理的接口本身,迪米特原則側(cè)重于調(diào)用接口的調(diào)用方

優(yōu)點(diǎn):
1.降低復(fù)雜度。
2.降低耦合度。

本文的靈感來源于維基百科和《Android開發(fā)進(jìn)階 從小工到專家》。

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

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

  • 本文出自《Android源碼設(shè)計(jì)模式解析與實(shí)戰(zhàn)》中的第一章。 1、優(yōu)化代碼的第一步——單一職責(zé)原則 單一職責(zé)原則的...
    MrSimp1e0閱讀 1,911評論 1 13
  • 本文原創(chuàng),轉(zhuǎn)載請注明出處。歡迎關(guān)注我的 簡書 ,關(guān)注我的專題 Android Class 我會長期堅(jiān)持為大家收錄簡...
    MeloDev閱讀 1,290評論 8 33
  • 1.單一職責(zé)原則 一個(gè)類只做一件事,需要根據(jù)自己的經(jīng)驗(yàn)判斷到底哪些內(nèi)容算是當(dāng)前一個(gè)類的職責(zé)。 定義:不要存在多于一...
    月剪西風(fēng)閱讀 329評論 0 0
  • 記在前面:這個(gè)《設(shè)計(jì)模式》系列的文章,想了很久才決定寫的,一是還是本人的原則,只有通過自己表達(dá)出來的東西,才是真正...
    l_sivan閱讀 711評論 6 17
  • 單一職責(zé)原則 單一職責(zé)原則(Single Responsibility Principle, SRP):一個(gè)類只負(fù)...
    小龍蛋閱讀 228評論 0 0

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