摘要
Martin Fowler的经典文章 + 透明的精彩翻译 + 1-2-3的UML插图(这个就不足挂齿了,呵呵)。
原文下载
《IoC 容器和Dependency Injection 模式》Martin Fowler 著,透明 译,PDF格式。
英文好的朋友也可以看原文 Inversion of Control Containers and the Dependency Injection pattern。
UML插图
我为构造子注入、设置值注入、接口注入以及Service Locator分别绘制了UML图,本想直接插入到PDF文件中,但是觉得这样会影响原文质量,三思之后还是决定就把图贴在Blog里好了。
使用 PicoContainer 进行构造子注入(Page 5)
图中黄颜色的类是Fowler写的组件,他的朋友不能更改;绿颜色的类可由他的朋友新增/修改。
MovieLister和MovieFinder类层次构成了Strategy模式。MovieLister符合针对接口编程的设计原则。还有一个非常好的地方是Client类 MovieListerTester也不依赖于实现类(例如 ColonMovieFinder)。对实现类的依赖被封装在了一个函数configureContainer()中。
![](/images/cnblogs_com/1-2-3/IOC/PicoContainer.png)
使用Spring 进行设值方法注入(Page 6)
图中黄颜色的类是Fowler写的组件,他的朋友不能更改;绿颜色的类可由他的朋友新增/修改。
MovieLister和MovieFinder类层次构成了Strategy模式。MovieLister符合针对接口编程的设计原则。还有一个非常好的地方是Client类 MovieListerTester也不依赖于实现类(例如 ColonMovieFinder)。对实现类的依赖被封装在了一个叫作“spring.xml”的文件中。
![](/images/cnblogs_com/1-2-3/IOC/Spring.png)
接口注入(Page 7)
图中黄颜色的类是Fowler写的组件,他的朋友不能更改;绿颜色的类可由他的朋友新增/修改。
MovieLister和MovieFinder类层次构成了Strategy模式。MovieLister符合针对接口编程的设计原则。
注意虽然在IfaceTester#configureLister()函数内创建了ColonMovieFinder的实例,但是由于只使用了它所实现的窄接口InjectFilename的injectFileName()函数,所以仍有使IfaceTester只依赖于InjectFilename接口的潜力。
![](/images/cnblogs_com/1-2-3/IOC/interface-inject.png)
使用Service Locator(Page 8)
![](/images/cnblogs_com/1-2-3/IOC/ServiceLocator.png)
时序图
![](/images/cnblogs_com/1-2-3/IOC/Locator-Seq.png)
工具箱
UML图使用Visio 2003+Pavel Hruby's UML2.0 模板绘制。文字部分使用Google 拼音输入法键入。
Martin Fowler的经典文章 + 透明的精彩翻译 + 1-2-3的UML插图(这个就不足挂齿了,呵呵)。
原文下载
《IoC 容器和Dependency Injection 模式》Martin Fowler 著,透明 译,PDF格式。
英文好的朋友也可以看原文 Inversion of Control Containers and the Dependency Injection pattern。
UML插图
我为构造子注入、设置值注入、接口注入以及Service Locator分别绘制了UML图,本想直接插入到PDF文件中,但是觉得这样会影响原文质量,三思之后还是决定就把图贴在Blog里好了。
使用 PicoContainer 进行构造子注入(Page 5)
图中黄颜色的类是Fowler写的组件,他的朋友不能更改;绿颜色的类可由他的朋友新增/修改。
MovieLister和MovieFinder类层次构成了Strategy模式。MovieLister符合针对接口编程的设计原则。还有一个非常好的地方是Client类 MovieListerTester也不依赖于实现类(例如 ColonMovieFinder)。对实现类的依赖被封装在了一个函数configureContainer()中。
![](/images/cnblogs_com/1-2-3/IOC/PicoContainer.png)
使用Spring 进行设值方法注入(Page 6)
图中黄颜色的类是Fowler写的组件,他的朋友不能更改;绿颜色的类可由他的朋友新增/修改。
MovieLister和MovieFinder类层次构成了Strategy模式。MovieLister符合针对接口编程的设计原则。还有一个非常好的地方是Client类 MovieListerTester也不依赖于实现类(例如 ColonMovieFinder)。对实现类的依赖被封装在了一个叫作“spring.xml”的文件中。
![](/images/cnblogs_com/1-2-3/IOC/Spring.png)
接口注入(Page 7)
图中黄颜色的类是Fowler写的组件,他的朋友不能更改;绿颜色的类可由他的朋友新增/修改。
MovieLister和MovieFinder类层次构成了Strategy模式。MovieLister符合针对接口编程的设计原则。
注意虽然在IfaceTester#configureLister()函数内创建了ColonMovieFinder的实例,但是由于只使用了它所实现的窄接口InjectFilename的injectFileName()函数,所以仍有使IfaceTester只依赖于InjectFilename接口的潜力。
![](/images/cnblogs_com/1-2-3/IOC/interface-inject.png)
使用Service Locator(Page 8)
![](/images/cnblogs_com/1-2-3/IOC/ServiceLocator.png)
时序图
![](/images/cnblogs_com/1-2-3/IOC/Locator-Seq.png)
工具箱
UML图使用Visio 2003+Pavel Hruby's UML2.0 模板绘制。文字部分使用Google 拼音输入法键入。