控制反转与依赖注入

来源:互联网 发布:医生转行 知乎 编辑:程序博客网 时间:2024/05/18 02:43

控制反转与依赖注入

换了工作,以前很多东西需要重新捡起来或者回顾一下。建博客的意思是把学习分类整理,还有是不想写字了,懒。
接触控制反转与依赖注入是很早的事情了,但后来一直做桌面开发,也没有考虑升级或者延续性,生疏了很多,这里简单回忆一下。


接触控制反转与依赖注入是很早的事情了,但后来一直做桌面开发,也没有考虑升级或者延续性,生疏了很多,这里简单回忆一下。

控制反转(IoC/Inverse Of Control): 调用者不再创建被调用者的实例,由容器创建(java的容器如:spring框架,.net的容器,比较常见的AutoFac,NInject等等),所以称为控制反转。
依赖注入(DI/Dependence injection) : 容器创建好实例后再注入调用者称为依赖注入。换句话来说,依赖从具体的类变成了大家都依赖于容器。

举例说明:
对象A调用对象B,如果A不知道B怎么办?
方法1: 对象A在自己的方法里,申明并新建一个对象B。
Object A
fun()
{
B temp = new B();
B.fun();
}
然后使用对象B。

     问题:如果软件进行了升级,B做了一些变化,变成了BPlus,这时需要使用升级过后的BPlus又需要找到new B()的地方,去增加new BPlus()......,对象A,B之间的耦合过于紧密。

方法2: 对象A在依赖于容器,通过容器获取B的接口。
Object A (interface _IB)
fun()
{
B temp = new B();
_IB.fun();
}
然后使用对象B的方法。
当对象B进行扩展,对象A都只要知道容器,然后从容器那里获取具体方法即可。
可以把IoC模式看做是工厂模式的升华,可以把IoC看作是一个大工厂,只不过这个大工厂里要生成的对象都是在XML文件中给出定义的,然后利用“反射”编程,根据XML中给出的类名生成相应的对象。从实现来看,IoC是把以前在工厂方法里写死的对象生成代码,改变为由XML文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性。

原创粉丝点击