定義
高層模塊不應該依賴低層模塊,兩者都應該依賴其抽象;抽象不應該依賴細節,細節應該依賴抽象
High level modules shouldnot depend upon low level modules.Both should depend upon abstractions.Abstractions should not depend upon details. Details should depend upon abstractions
依賴:在程序設計中,如果一個模塊a 使用/調用 了另一個模塊b,我們稱模塊a依賴模塊b。
高層模塊與低層模塊:往往在一個應用程序中,我們有一些低層次的類,這些類實現了一些基本的或初級的操作,我們稱之爲低層模塊;另外有一些高層次的類,這些類封裝了某些複雜的邏輯,並且依賴於低層次的類,這些類我們稱之爲高層模塊。
其核心思想是:要面向接口編程,不要面向實現編程。
(通過抽象使各個類或者模塊不相互影響,實現松耦合。 高層 - 抽象 - 低層)
依賴倒置原則是實現開閉原則的重要途徑之一,它降低了客戶與實現模塊之間的耦合。
由於在軟件設計中,細節具有多變性,而抽象層則相對穩定,因此以抽象爲基礎搭建起來的架構要比以細節爲基礎搭建起來的架構要穩定得多。這裏的抽象指的是接口或者抽象類,而細節是指具體的實現類。
使用接口或者抽象類的目的是制定好規範和契約,而不去涉及任何具體的操作,把展現細節的任務交給它們的實現類去完成。
作用
- 依賴倒置原則可以降低類間的耦合性。
- 依賴倒置原則可以提高系統的穩定性。
- 依賴倒置原則可以減少並行開發引起的風險。
- 依賴倒置原則可以提高代碼的可讀性和可維護性。
實現
遵循以下4點,就能在項目中滿足這個規則。
- 每個類儘量提供接口或抽象類,或者兩者都具備。
- 變量的聲明類型儘量是接口或者是抽象類。
- 任何類都不應該從具體類派生。
- 使用繼承時儘量遵循里氏替換原則。