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內的值來換工作,這樣是不是變得彈性很多了呢~
今天就先講到這裡,讓各位有個概念,明天才是真正的重頭戲,因為明天的內容都是以今天的觀念去延生,所以今天的內容希望各位都能夠吸收。