一
IoC就是Inversion of Control
下面我們以幾個例子來說明什麼是IoC
假設我們要設計一個Girl和一個Boy類
在我們中國
1 青梅竹馬
那麼哪一種才是最好呢?
青梅竹馬
代碼:
public class Girl {
void kiss(){
Boy boy = new Boy();
}
}
然而從開始就創建的Boy缺點就是無法在更換
親友介紹
代碼:
public class Girl {
void kiss(){
Boy boy = BoyFactory
}
}
親友介紹
父母包辦
代碼:
public class Girl {
void kiss(Boy boy){
// kiss boy
boy
}
}
Well
這就是IOC
我們知道好萊塢原則
我們還應該知道依賴倒轉原則即 Dependence Inversion Princinple
Eric Gamma說
組件應該分為兩部分
Service
Implementation
好處是
所以
二
IoC的Type指的是Girl得到Boy的幾種不同方式
IOC type
代碼:
public class Girl implements Servicable {
private Kissable kissable;
public Girl() {
kissable = new Boy();
}
public void kissYourKissable() {
kissable
}
}
Girl自己建立自己的Boy
IOC type
代碼:
public class Girl implements Servicable {
Kissable kissable;
public void service(ServiceManager mgr) {
kissable = (Kissable) mgr
}
public void kissYourKissable() {
kissable
}
}
這種情況出現於Avalon Framework
另外
它依賴於配置文件
代碼:
…
IOC type
代碼:
public class Girl {
private Kissable kissable;
public void setKissable(Kissable kissable) {
this
}
public void kissYourKissable() {
kissable
}
}
Type
代碼:
IOC type
代碼:
public class Girl {
private Kissable kissable;
public Girl(Kissable kissable) {
this
}
public void kissYourKissable() {
kissable
}
}
這就是PicoContainer的組件
代碼:
PicoContainer container = new DefaultPicoContainer();
container
container
Girl girl = (Girl) container
girl
From:http://tw.wingwit.com/Article/program/Java/Javascript/201311/25429.html