依賴倒置原則的定義 依賴倒置原則的原始定義如下: High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not de ...
依賴倒置原則的定義
依賴倒置原則的原始定義如下:
High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions.
翻譯過來,包含如下三層含義:
- 高層模塊不應該依賴低層模塊,兩者都應該依賴其抽象
- 抽象不應該依賴於細節
- 細節應該依賴於抽象
高層模塊和低層模塊容易理解,每一個邏輯的實現都是由原子邏輯組成的,不可分割的原子邏輯就是低層模塊,原子邏輯的再組裝就是高層模塊.抽象就是指 介面或抽象類,兩者都不能被實例化;細節就是實現類.
依賴倒置原則在Java語言中表現為:
- 模塊間的依賴通過抽象產生,實現類之間不發生直接依賴,其依賴關係是通過介面或抽象類產生的
- 介面或抽象類不依賴於實現類
- 實現類依賴介面或抽象類
依賴倒置原則的好處
採用依賴倒置原則可以減少類間的耦合性,提高系統的穩定性,降低並行開發引起的風險,提高代碼的可讀性和可維護性.
依賴的三種寫法
在開發中,對象的依賴關係有三種方式來傳遞
1.構造函數傳遞依賴對象
在類中通過構造函數聲明依賴對象,這種方式叫做構造函數註入
2.Setter方法傳遞依賴對象
在抽象中設置Setter方法聲明依賴關係, 在對象創建後,調用方法註入,這種方式叫做 Setter依賴註入
3.介面聲明依賴對象
在具體方法中聲明依賴對象,在調用方法時將對象傳入, 這種方式叫做 介面註入
依賴倒置原則的本質就是通過抽象使各個類或模塊的實現彼此獨立,互不影響,實現模塊間的松耦合,我們怎麼在項目中使用能,遵循以下幾個原則就可以:
- 各個類儘量都有介面或抽象類,或者兩者都有
- 變數的錶面類型儘量是介面或者抽象類,不是絕對,比如一個工具類,一般是不需要介面或抽象類的
- 任何類都不應該從具體類派生
- 儘量不要覆寫基類的方法
- 結合里氏替換原則(父類出現的地方,子類就可以出現),例如,介面負責定義public屬性和方法,並且聲明與其他對象的依賴關係,抽象類負責公共構造部分的實現,實現類精確的實現業務邏輯同時在適當的時候對父類進行細化
依賴倒置原則是6個設計原則中最難以實現的原則,他是實現開閉原則的重要途經,依賴倒置原則沒有實現,就別想實現對擴展開放,對修改關閉.在項目中,只要記住是"面向介面編程"就基本抓住了依賴倒置原則的核心