摘要

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()中。
插图版《IoC 容器和Dependency Injection 模式》

使用Spring 进行设值方法注入(Page 6)
图中黄颜色的类是Fowler写的组件,他的朋友不能更改;绿颜色的类可由他的朋友新增/修改。
MovieLister和MovieFinder类层次构成了Strategy模式。MovieLister符合针对接口编程的设计原则。还有一个非常好的地方是Client类 MovieListerTester也不依赖于实现类(例如 ColonMovieFinder)。对实现类的依赖被封装在了一个叫作“spring.xml”的文件中。
插图版《IoC 容器和Dependency Injection 模式》

接口注入(Page 7)
图中黄颜色的类是Fowler写的组件,他的朋友不能更改;绿颜色的类可由他的朋友新增/修改。
MovieLister和MovieFinder类层次构成了Strategy模式。MovieLister符合针对接口编程的设计原则。
注意虽然在IfaceTester#configureLister()函数内创建了ColonMovieFinder的实例,但是由于只使用了它所实现的窄接口InjectFilename的injectFileName()函数,所以仍有使IfaceTester只依赖于InjectFilename接口的潜力。
插图版《IoC 容器和Dependency Injection 模式》

使用Service Locator(Page 8)
插图版《IoC 容器和Dependency Injection 模式》

时序图

插图版《IoC 容器和Dependency Injection 模式》

工具箱

UML图使用Visio 2003+Pavel Hruby's UML2.0 模板绘制。文字部分使用Google 拼音输入法键入。

分类:

技术点:

相关文章: