摘要
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()中。

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

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

使用Service Locator(Page 8)

时序图

工具箱
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()中。

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

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

使用Service Locator(Page 8)

时序图

工具箱
UML图使用Visio 2003+Pavel Hruby's UML2.0 模板绘制。文字部分使用Google 拼音输入法键入。
分类:
实用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?