iT邦幫忙

2022 iThome 鐵人賽

DAY 26
0
Mobile Development

android studio 30天 精華筆記系列 第 26

精華筆記 Day26 - Dependency Injection(DI)

  • 分享至 

  • xImage
  •  

Dependency Injection為一種軟體設計模式,為了能夠達到低耦合性,其常常在控制反轉(IOC)的實現方法中可以看見,主要重點觀念為物件由別人生成傳給接收方,此稱為依賴。而注入則是將依賴傳給接收方的行為,而不是自己NEW。

先來講講沒有使用DI的例子:
假設有一個類別Work.class和Human.class 如下。

  • Work.class
    public class Work {
    private String workName;

    public Work(String workName) {
    this.workName = workName;
    }
    public String getWorkName() {
    return workName;
    }

    public void setWorkName(String workName) {
    this.workName = workName;
    }
    }

  • Human.class

public class Human {
    private Work work;
    public Human() {
        work = new Work("工程師");
    }
}

這裡兩者的關西,稱為Human依賴Work,因為沒有Work的話,Human無法建立。

這樣的缺點是,當Work一改,也必需進到Human裡面修改Work的建構。這樣也會有兩個人做同一份工作,卻需要new 出兩個Work出來,以及只要是Human就只能做"工程師"。

那我們來看看使用DI的例子
以下我以常見的DI實現例子建構子傳入的方式:
將Human.class修改為以下:

public class Human {
    private Work work;
    public Human(Work work) {
        this.work = work 
    }
}

如此一來,Human要做甚麼工作都由外部注入,而Human只需要依賴外部注入進來Work就好了,Human的工作一樣,也可以new出一個Work,注入不同的Human,達到重複使用Work的效果。也可以透過外部修改Work內的值來換工作,這樣是不是變得彈性很多了呢~

今天就先講到這裡,讓各位有個概念,明天才是真正的重頭戲,因為明天的內容都是以今天的觀念去延生,所以今天的內容希望各位都能夠吸收。


上一篇
精華筆記 Day25 - Retrofit+RxJava/Room+RxJava
下一篇
精華筆記 Day27-Dagger2
系列文
android studio 30天 精華筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言