<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 英文名稱(Dependence Inversion Principle ,DIP) **定義**:高層模塊不應該依賴低層模塊,應該依賴其抽象,抽象不應該依賴其細節,細節應該依賴其抽象。 **這句話在java中的理解**: 低層模塊:具體細化的java類 高層模塊:是由多個低層模塊組成的。 抽象:指的是接口或者抽象類 依賴:存在類A的一個方法S,S傳入的參數是另一個類B的實例,那么類A依賴于類B?我的理解---在項目開發中盡量將相同模塊細化,類與類之間減少依賴關系,應該依賴其抽象類或者接口。 一個反面的例子: ----一個司機開寶馬車。 按照常規的思維:定義一個司機類(Driver)有個void drive(BMW bmw)方法。該方法需要傳入寶馬車實例, 定義一個寶馬車類(BMW) 有一個run方法。 ![](https://box.kancloud.cn/2016-06-06_57553406bfba4.jpg) ~~~ public class DIPTest { public static void main(String[] args) { new Driver().drive(new BMW()); } } class Driver{ public void drive(BMW bmw){ System.out.println("司機開車..."); bmw.run(); } } class BMW{ public void run(){ System.out.println("寶馬車開動了...."); } } ~~~ **更改需求**,司機現在改開奔馳了,那么如果在這個類的基礎上更改,我們需要給司機提供一個drive(Benz b)的方法。 同時再提供一個Benz類,提供一個run方法。那么就存在類之間的依賴性太大,不利于類的拓展。 **----解決方案**: 讓細節類依賴其抽象,寶馬車、奔馳車都具有run()方法,司機都具有drive(Car car)的方法。可以將共同的方法和類抽象成接口。 這樣設計的好處,可以將司機和車分為兩個模塊進行開發,兩者之間的依賴關系存在于接口,而具體實現類依賴于接口。這樣在分工協作時,只需要各自定義好接口的操作方法就可以了。并且類的擴展性也大大提高。 ![](https://box.kancloud.cn/2016-06-06_57553406dcb84.jpg) ~~~ package hpu.lzl.dip; public class DIPTest2 { public static void main(String[] args) { IDriver d = new Driver2(); ICar ic = new BenzCar(); d.Driver(ic); System.out.println("----------------"); d.Driver(new BMWCar()); } } interface IDriver{ public void Driver(ICar car); } interface ICar{ public void run(); } class Driver2 implements IDriver{ @Override public void Driver(ICar car) { System.out.println("司機開車....."); car.run(); } } class BMWCar implements ICar{ @Override public void run() { System.out.println("寶馬車開動了...."); } } class BenzCar implements ICar{ @Override public void run() { System.out.println("奔馳車開動了...."); } } ~~~ 依賴的三種寫法 ## 1、構造函數傳遞依賴 ~~~ interface IDriver{ public void drive(); } class Driver2 implements IDriver{ private ICar car; public Driver2(ICar car){ this.car = car; } @Override public void drive() { System.out.println("司機發動車了..."); car.run(); } } ~~~ ## 2、setter方法傳遞依賴 ~~~ interface IDriver{ public void drive(); public void setCar(ICar car); } class Driver2 implements IDriver{ private ICar car; @Override public void drive() { System.out.println("司機開車....."); car.run(); } @Override public void setCar(ICar car) { // TODO Auto-generated method stub this.car = car; } } ~~~ ## 3、接口傳遞依賴 ~~~ interface IDriver{ public void drive(ICar car); } class Driver2 implements IDriver{ @Override public void drive(ICar car) { System.out.println("司機發動車了..."); car.run(); } } ~~~ **我對依賴倒置的理解** 依賴倒置首先要求類之間具有聯系,將其聯系抽象成接口或者抽象類,這樣降低類之間的依賴。從而產生抽象類或接口之間的依賴,將具體事物時間的依賴轉化成抽象接口的依賴。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看