java 控制反轉和依賴注入的理解

豬頭強發表於2015-10-09

開始好好學習java基礎和思想~

控制反轉(IOC)是Spring框架的核心思想,用我自己的話說,就是你要做一件事,別自己可勁new了,你就說你要幹啥,然後外包出去就好~
依賴注入(DI) 在我淺薄的想法中,就是通過介面的引用和構造方法的表達,將一些事情整好了反過來傳給需要用到的地方~

這樣做得好處:做到了單一職責,並且提高了複用性,解耦了之後,任你如何實現,使用介面的引用呼叫的方法,永遠不需要改變

 

舉一個栗子:

寫個介面,說我們們購物去~

public interface IShopping {
    void drive();
    String Money();    
}

在實現它兩下:有錢人購物,沒錢人購物     - -!這栗子舉的

 

public class RichMan implements IShopping{
    @Override
    public void drive() {
        System.out.println("Drive By Benz");        
    }

    @Override
    public String Money() {
        System.out.println("lot`s of money");
        return "10000";
    }
}
public class PoorGuy implements IShopping{
    @Override
    public void drive() {
        System.out.println("take a walk!");
    }

    @Override
    public String Money() {
        System.out.println("nothing");
        return "1";
    }
}

然後我們出去玩,順便shopping一下吧~

public class Play {
    
    private IShopping shoppingSomething;
    
  //使用構造方法,將實現傳入
public Play(IShopping shoppingSomething){ this.shoppingSomething = shoppingSomething; } public void withgirlFriend(){ shoppingSomething.drive(); shoppingSomething.Money(); }
}

 

將想用的實現方式,用容器注入進來,這裡就模擬下下怎麼注入:

public class Containner {
    
    public Play getShopping(){
        return new Play(new RichMan());
    }
}

 

測試一下:

public static void main(String[] args) {
        Containner containner = new Containner();
        Play play =  containner.getShopping();
        play.withgirlFriend();    
    }

結果是:

Drive By Benz
lot`s of money

如果再依賴注入的配置時,配置為窮人的實現,那我們的程式碼都不用變,結果就會改變~   嗯,應該理解了。

 

相關文章