Dependency Injection 依赖注入

先概括Dependency Injection也就是依赖注入:一种设计模式,当类设计中使用到某种其它的类或插件类时,是通过对象引用而不是直接创建对象来实现的,在声明的时候,只需确定接口或者基类就可以了。

 

引用概念提出者martin fowler的原图,在一种设计模式下,一个类可以在类的定义里面去创建和使用另一个类,例如:

Figure 1

这里MovieLister类创建了MovieFinderImpl类,而MovieFinderImpl类实现了MovieFinder的接口。这种情况下,如果MovieLister如果要使用其他实现MovieFinder接口的类,就不得不改变创建对象的实现。比如,原来是new MovieFinderImpl_1(),现在是new MovieFinderImpl_2()。

而依赖注入的设计方法引入了一个“注入点”的概念,把依赖关系独立到另外的部分,而不是MovieLister本身的实现中来做,MoviewLister这个类不需要关心最终使用的是哪个MovieFinder的实现类。依赖注入的关系图如下:

Figure 2

在上面的图里面,我们可以看到,我们只规定MovieLister依赖于MovieFinder,而具体有哪些对MovieFinder的实现类,我们并不关心。具体的对象创建和传入都是由Assembler来处理的。这样一来,我们可以保证MovieLister本身对于MovieFinder扩展时表现的可扩展性。

 

在广义上,Dependency Injection也是Inversion of Control(IoC)的一种。Dependency Injection在查找/使用插件类的时候,控制反转了,一般的模式(第一幅图)是MovieLister进行控制,而依赖注入模式下,是由Assembler进行控制,相对于MovieLister来说,控制方向变化了。

 

有两篇关于依赖注入的文章写得比较好,一篇是martin fowler的原文,另一篇是中文的,例子写得也比较好。

1. http://www.cnblogs.com/leoo2sk/archive/2009/06/17/1504693.html

2. http://www.martinfowler.com/articles/injection.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值