1. 程式人生 > 其它 >依賴倒置原則_設計模式的7大原則之依賴倒置詳解

依賴倒置原則_設計模式的7大原則之依賴倒置詳解

技術標籤:依賴倒置原則

2. 依賴倒置(Dependence Inversion Principle)

  • 定義
  1. 依賴倒置原則(Dependence Inversion Principle,DIP),是指設計程式碼結構時,高層模組不應該依賴底層模組,二者都應該依賴其抽象。抽象不應該依賴細節;細節應該依賴抽象,通過依賴倒置,可以減少類與類之間的耦合性,提高系統的穩定性,提高程式碼的可讀性和可維護性,並能夠降低修改程式所造成的風險。
  2. **以抽象為基準比細節為基準搭建起來的架構要穩定的多,在java中,抽象指的是介面或者抽象類,細節指的是具體的實現類。因此大家在拿到需求的之後,需要面向介面程式設計,先頂層再細節來設計程式碼結構。
  • 示例

依賴倒置原則的目的是通過面向介面程式設計來降低類間的耦合性, 所以需要我們在實際程式設計中遵循以下4點,專案就能滿足這個規則:a. 每個類儘量提供介面或者抽象類,或者兩者都具備。 b. 變數是宣告型別儘量是介面或者抽象類。 c. 任何類都不應該從具體類派生。 d. 使用繼承時儘量使用裡式替換原則。

下面以"顧客購物程式"為例來說明依賴倒置原則。

【例1】依賴倒置原則在"顧客購物程式"中的應用

分析:本程式反映了"顧客類"與"商店類"的關係,商店類有sell()方法,顧客類通過該方法購物以下程式碼定義了顧客類通過北京店購物:

public class Customer {public void shopping(BeiJingShop shop){System.out.println(shop.sell());}}public class BeiJingShop{public String sell(){}}

這樣設計存在缺陷,如果顧客想從上海店購物,需要修改原始碼:

public class Customer {public void shopping(ShangHaiShop shop){System.out.println(shop.sell());}}

顧客每次更換一家商店,都需要修改一次程式碼,明顯違背了開閉原則,存在以上問題的原因在於將顧客類設計的時候已經將店鋪綁定了,這違背了依賴倒置原則,解決方法是定義上海店和北京點的公共抽象介面Shop。顧客類面向該介面程式設計。其程式碼修改:

public class Customer {public void shopping(Shop shop){System.out.println(shop.sell());}}

這樣不管顧客類訪問什麼商店,或者新增新的商店,都需要修改原始碼,其類圖:

a2cf7e7dbc086d9b289d56812efa129e.png
public class DLPTest{public static void main(String[] args){  Customer customer = new Customer();  customer.shopping(new BeiJingShop());  customer.shopping(new ShangHaiShop());}private static class Customer {public void shopping(Shop shop){System.out.println(shop.sell());}}private static interface Shop{String sell();}private static class BeiJingShop implements Shop{@Overridepublic String sell(){return "在北京商店購物";}}private static class ShangHaiShop implements Shop{@Overridepublic String sell(){return "在上海商店購物";}}}
  • 總結
  1. 依賴倒置原則是實現開閉原則的重要途徑之一,它降低了客戶與實現模組之間的耦合。
  2. 依賴倒置的核心思想是面向介面程式設計,而不是面向實現程式設計。
  3. 使用介面或者抽象類的目的是定製好規範,而不涉及任何具體操作,把展現細節的任務交給他們的實現類去完成。