通常在程式撰寫上,若要由A呼叫B,通常都是直接以"主動"的方式去呼叫。
A → B
主動建立
在這結構中過程中加入IoC/DI容器,會變得如何?(注意箭頭方向)
A ← IoC/DI Container → B
被動
此時A取得B instance時是採被動方式,由IoC/DI Container先取得B instance再植入A。
IoC及DI,其實只是針對同一件事情,以不同的角度去描述。
IoC -- Inversion Control (控制反轉)
容器控制應用程式,由容器反向的向應用程式植入其所需的外部資源。
DI -- Dependency Injection (相依植入)
應用程式建立相依容器且植入所需的外部資源。
IoC/DI Container,可有效分離物件和其所需要的外部資源,使它們鬆散耦合,亦有利於功能重用,更使得程式整個體系結構變得更加靈活。
以下為IoC/DI程式範例
public class A {
//等待被植入
private B b = null ;
//植入資源B
public void setB(B b) {
this.b = b;
}
public void t1() {
//此時要使用b,但不主動去建立,直接呼叫使用。
b.tc();
}
}
public interface B {
public void tc();
}
由此程式碼可見,A要使用B時,需等待instance被植入,此範例就不實作IoC/DI Container。
全站熱搜