定義
高層模組不應該依賴低層模組,二者都應該依賴其抽象;抽象不應該依賴細節;細節應該依賴抽象。
以抽象為基礎搭建起來的架構比以細節為基礎搭建起來的架構要穩定的多。
抽象指的是介面或者抽象類,細節就是具體的實現類,使用介面或者抽象類的目的是制定好規範和契約,而不去涉及任何具體的操作,把展現細節的任務交給他們的實現類去完成。
依賴倒置原則核心思想
依賴倒置原則的核心思想是面向介面程式設計,我們依舊用乙個例子來說明面向介面程式設計比相對於面向實現程式設計好在什麼地方。
舉例1:
場景是這樣的,母親給孩子講故事,只要給她一本書,她就可以照著書給孩子講故事了。**如下:
:class book
}class mother
}public class client
}執行結果:
媽媽開始講故事
很久很久以前有乙個阿拉伯的故事……
需求變動
執行良好,假如有一天,需求變成這樣:不是給書而是給乙份報紙,讓這位母親講一下報紙上的故事,報紙的**如下:
class news*****
}這位母親卻辦不到,因為她居然不會讀報紙上的故事,這太荒唐了,只是將書換成報紙,居然必須要修改mother才能讀。
假如以後需求換成雜誌呢?換成網頁呢?
還要不斷地修改mother,這顯然不是好的設計。
原因就是mother與book之間的耦合性太高了,必須降低他們之間的耦合度才行。
抽象的介面
我們引入乙個抽象的介面ireader。
讀物,只要是帶字的都屬於讀物:
inte***ce ireader
mother類與介面ireader發生依賴關係,而book和news*****都屬於讀物的範疇,
他們各自都去實現ireader介面,這樣就符合依賴倒置原則了,**修改為:
inte***ce ireader
class news***** : ireader
}class book : ireader
}class mother
}public class client
}執行結果
媽媽開始講故事
很久很久以前有乙個阿拉伯的故事……
媽媽開始講故事
林書豪17+9助尼克斯擊敗老鷹……
這樣修改後,無論以後怎樣擴充套件client類,都不需要再修改mother類了。
這只是乙個簡單的例子,實際情況中,代表高層模組的mother類將負責完成主要的業務邏輯,一旦需要對它進行修改,引入錯誤的風險極大。
所以遵循依賴倒置原則可以降低類之間的耦合性,提高系統的穩定性,降低修改程式造成的風險。
採用依賴倒置原則給多人並行開發帶來了極大的便利,
比如上例中,原本mother類與book類直接耦合時,mother類必須等book類編碼完成後才可以進行編碼,因為mother類依賴於book類。
修改後的程式則可以同時開工,互不影響,因為mother與book類一點關係也沒有。
參與協作開發的人越多、專案越龐大,採用依賴導致原則的意義就越重大。
現在很流行的tdd開發模式就是依賴倒置原則最成功的應用。
在實際程式設計中,我們一般需要做到如下3點
1.低層模組盡量都要有抽象類或介面,或者兩者都有。
2.變數的宣告型別盡量是抽象類或介面。使用繼承時遵循黎克特制替換原則。
3.依賴倒置原則的核心就是要我們面向介面程式設計,理解了面向介面程式設計,也就理解了依賴倒置。
設計模式 依賴倒置原則
what high level modules should note depend upon low level modules.both should depend 高層模組不應該依賴底層模組,兩者都應該其抽象 抽象不應該依賴細節 細節應該依賴抽象 模組間的依賴通過抽象發生,實現類之間不發生直接...
設計模式原則 依賴倒置原則(DIP)
定義 高層模組不應該依賴低層模組,二者都應該依賴其抽象 抽象不應該依賴細節 細節應該依賴抽象。問題由來 類a直接依賴類b,假如要將類a改為依賴類c,則必須通過修改類a的 來達成。這種場景下,類a一般是高層模組,負責複雜的業務邏輯 類b和類c是低層模組,負責基本的原子操作 假如修改類a,會給程式帶來不...
5 依賴倒置原則
電腦主機板上的顯示卡,記憶體,硬碟,風扇.等 如果說和主機板的關係是 color red 易插拔關係 color 那麼軟體中就應該是 color red 高內聚,低耦合 color 了.color red 依賴倒置原則,抽象不應該依賴細節,解析應該依賴抽象,說白了就是針對介面程式設計,不要對實現程式...