Java設計原則—依賴倒置原則(轉)

來源:互聯網
上載者:User

標籤:模型   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設計原則—依賴倒置原則(轉)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.