標籤:模型 href ges 世界 border 類的方法 變數 其他 set
依賴倒置原則(Dependence Inversion Principle,DIP)的原始定義:
- 高層模組不應該依賴底層模組,兩者都應該依賴其抽象;
- 抽象不應該依賴細節;
- 細節應該依賴抽象。
依賴倒置原則在Java語言中的表現是:
- 模組間的依賴通過抽象發生,實作類別之間不發生直接的依賴關係,其依賴關係是通過介面或者抽象類別產生的;
- 介面或抽象類別不依賴於實作類別;
- 實作類別依賴介面或抽象類別。
依賴倒置原則實際上就是要求“面向介面編程”。
採用依賴倒置原則可以減少類間的耦合性,提高系統的穩定性,降低並行開發引起的風險,提高代碼的可讀性和可維護性。
例:
司機介面
public interface IDriver { public void driver(ICar car); }
司機實作類別
public class Driver implements IDriver { public void driver(ICar car) { car.run(); } }
汽車介面
public interface ICar { public void run(); }
汽車實作類別
public class Benz implements ICar { public void run() { System.out.println("平治汽車開始運行..."); } }
public class BMW implements ICar { public void run() { System.out.println("寶馬汽車開始運行..."); } }
情境類
public class Client { /** * @param args */ public static void main(String[] args) { IDriver zhangSan = new Driver(); ICar benz = new Benz(); zhangSan.driver(benz); } }
依賴的三種寫法
只要做到抽象依賴,即使是多層的依賴傳遞也無所謂懼!
public class Driver implements IDriver { private ICar car; public Driver(ICar _car) { this.car = _car; } public void driver() { this.car.run(); } }
- Setter方法傳遞依賴對象——Setter依賴注入
public class Driver implements IDriver { private ICar car; /** * @param car the car to set */ public void setCar(ICar car) { this.car = car; } public void driver() { this.car.run(); } }
public class Driver implements IDriver { public void driver(ICar car) { car.run(); } }
本質:
依賴倒置原則的本質就是通過抽象(介面或者抽象類別)使各個類或模型的實現彼此獨立,不互相影響,實現模組間的松耦合。
規則:
- 每個類盡量都有介面或抽象類別,或者抽象類別和介面兩者都具備;
- 變數的表面類型盡量是介面或者抽象類別;
- 任何類都不應該從具體類派生;
- 盡量不要覆寫基類的方法;
- 結合裡氏替換原則使用。
介面負責定義public屬性和方法,並且聲明與其他對象的依賴關係,抽象類別負責公用構造部分的實現,實作類別準確的實現商務邏輯,同時在適當的時候對父類進行細化。
依賴倒置與依賴正置
依賴正置就是類間的依賴是實實在在的實作類別間的依賴,也就是面向實現編程,這也是正常人的思維方式,我要開平治車就依賴平治車,我要使用膝上型電腦就直接依賴膝上型電腦,而編寫程式需要的是對現實世界的事物進行抽象,抽象的結構就是有了抽象類別和介面,然後我們根據系統設計的需要產生了抽象間的依賴,代替了人們傳統思維中的事物間的依賴,“倒置”就是從這裡產生的。
Java設計原則—依賴倒置原則(轉)