技术开发 频道

IOC模式最形象的解释

    IoC的类型指的是Girl得到Boy的几种不同方式。我们逐一来说明。


    IOC type 0:不用IOC

public class Girl implements Servicable {

   private Kissable kissable;

   public Girl() {

   kissable = new Boy();

}

public void kissYourKissable() {

   kissable.kiss();

}

}

   Girl自己建立自己的Boy,很难更换,很难共享给别人,只能单独使用,并负责完全的生命周期。
   IOC type 1,先看代码:

public class Girl implements Servicable {

Kissable kissable;
public void service(ServiceManager mgr) {
kissable = (Kissable) mgr.lookup(“kissable”);

}

public void kissYourKissable() {
    kissable.kiss();
}

}

    这种情况出现于Avalon Framework。一个组件实现了Servicable接口,就必须实现service方法,并传入一个ServiceManager。其中会含有需要的其它组件。只需要在service方法中初始化需要的Boy。另外,J2EE中从Context取得对象也属于type 1,它依赖于配置文件:

IOC type 2:

public class Girl {

private Kissable kissable;

public void setKissable(Kissable kissable) {

this.kissable = kissable;

}

public void kissYourKissable() {

kissable.kiss();

}

}

Type 2出现于Spring Framework,是通过JavaBean的set方法来将需要的Boy传递给Girl。它必须依赖于配置文件。
IOC type 3

public class Girl {

private Kissable kissable;

public Girl(Kissable kissable) {

this.kissable = kissable;

}

public void kissYourKissable() {

kissable.kiss();

}

}

这就是PicoContainer的组件 。通过构造函数传递Boy给Girl。

PicoContainer container = new DefaultPicoContainer();

container.registerComponentImplementation(Boy.class);

container.registerComponentImplementation(Girl.class);

Girl girl = (Girl) container.getComponentInstance(Girl.class);

girl.kissYourKissable();

 

0
相关文章