2004年第2期的《程序员》杂志里,有一篇martin flower的关于Ioc的文章。拜读过martin的《refactor》,所以关于他的文章当然要细细品味。不过在martin用来说明IoC的例子,我觉得似乎很困惑。我完全可以用一个factory method来代替IoC实现这个例子。所以不明白这两者之间有什么具体区别,还是说工厂的方法就是实现IoC的一个具体实现。
后来在jdon上看到bq的文章,正好是我需要的。
假设有两个类B 和 C:B作为调用者,C是被调用者,在B代码中存在对C的调用: public class B{
private C comp;
......
}
当客户端调用B时,分别使用工厂模式和Ioc有不同的特点和区别:
主要区别体现在B类的代码,如果使用Ioc,在B类代码中将不需要嵌入任何工厂模式等的代码,因为这些工厂模式其实还是与C有些间接的联系,这样,使用Ioc彻底解耦了B和C之间的联系。
使用Ioc带来的代价是:需要在客户端或其它某处进行B和C之间联系的组装。
所以,Ioc并没有消除B和C之间这样的联系,只是转移了这种联系。