控制反转(IoC) ? 工厂模式?

原创 2015年11月19日 10:47:10

                                      

         不知道大家还记不记得当年程杰的《大话设计模式》了,最近一直想搞明白控制反转到底是怎么回事,刚刚觉得高大上了一点,然后再进一步去学习去对比的时候才发现,以前早就接触过这类的思想,设计原则的依赖倒转和设计模式的工厂方法都很好的体现了这种思想,迫不及待的想要跟大家分享一下啦!

 

、依赖倒转原则


A.高层模块不应该依赖低层模块。两个都应该依赖于抽象。

B.抽象不应该依赖细节,细节应该依赖于抽象。说白了就是,要针对接口编程,不要对实现编程。

        在控制反转的原理中,我们了解到,我们将对象的实例化放到了容器中,在产品实现的时候,我们直接调用接口,即容器将其所依赖的对象的引用传递到产品代码中。IoC管理对象间的依赖关系,产品代码只需要针对接口编程,而不再依赖于具体实现。与依赖倒转原则如出一辙。

 

                           

、工厂方法模式


        定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

工厂方法遵循开放-封闭原则,并且保持了封装对象创建过程的优点。

        我们可以把IoC模式看做是工厂模式的升华,把IoC看做是一个大工厂,只不过这个大工厂里要生成的对象都是在XML文件中给出定义的,然后利用Java的“反射”编程,根据XML中给出的类名生成相应的对象。从实现来看,IoC是把以前在工厂方法里写死的对象生成代码,改变为由XML文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性。

 

                   

 

、反射


        工厂方法也有缺点,就是每加一个产品,就需要加一个产品工厂的类,增加了额外的开发量。不知道大家还记不记得在书里,写工厂方法的那一章,在最后一段话中,给大家留下了一个伏笔——反射。

        在后面讲到抽象工厂的时候,就提到了依赖注入的名词。就拿抽象工厂来说,如果我们需要新增一个数据库类型,就需要在代码中添加一条分支条件,破坏了开闭原则,这个时候依赖注入本身是没有能力解决这个问题的,但是如果我们利用语言支持反射机制,利用反射配置数据源,就可以避免分支判断的问题。

        让我们想想,反射做了什么工作,我们工程一开始的难点出在对象最后都是需要new,实例化的,而我们只能实例化当前已有的类,不能对未来会添加的新类做处理,所以一旦有新的类加入,我们就必须修改代码。但是,如果我们有一种方法,不是通过new,而是通过类的名字来实例化对象,那么我只需要将类的名字作为配置项,就可以实现不修改代码的前提下加未来会出现的类。所以,我们可以毫不夸张的说,反射给了语言“预见未来”的能力,使得多态性和依赖注入的威力大增

 

四、结束语

 

          看了一大堆资料,把以前的设计模式也翻出来研究了一番,画画图,思路更加的清晰IoC感觉就像”抽象工厂+反射+配置文件“,如图,我们可以把AbstractFactory作为IoC容器,并且加入反射机制和配置文件,实现灵活配置类名。(解释,配置文件取代ConcreFactory1ConcreFactory2,具体用哪个,灵活配置类名即可;反射用在AbstractFactory里,取代分支判断,避免了后期扩展修改代码的弊病)

                                

 

         OK,面向对象无外乎那几个原则,大道至简的路,还很漫长,java的学习,才刚刚开始,加油吧!

版权声明:本文为博主原创文章,未经博主允许不得转载。

控制反转(IoC) ? 工厂模式?

不知道大家还记不记得当年程杰的《大话设计模式》了,最近一直想搞明白控制反转到底是怎么回事,刚刚觉得高大上了一点,然后再进一步去学习去对比的时候才发现,以前早就接触过这类的思想,设计原则的依赖倒转和设计...

工厂模式、控制反转及依赖注入

工厂模式、控制反转及依赖注入      工厂模式原本作为高级篇的一个篇章(其难度充其量就那个难度),但是考虑与本章的联系,所以并入本章。      在介绍工厂模式与控制反转(Inversi...

IOC控制反转学习文档

  • 2012年03月26日 10:46
  • 488KB
  • 下载

用PHP实现简单的IoC控制反转(DI依赖注入模式)

首先编写 Fruit 的 POJO 和 Fruit 接口。继承 Fruit 接口生成两个类 Apple 和 Banana,这两个类都实现了接口的 showColor() 方法。 Fruit.ph...
  • lanyd
  • lanyd
  • 2015年12月10日 15:37
  • 1638

精通android体系架构、mvc、常见的设计模式、控制反转(ioc)

1,请看某个著名的it公司一则招聘信息的其中一条要求:“熟悉android系统架构及相关技术,1年以上实际android平台开发经验;”,里面非常明确的说道要求熟练android系统架构,这从某种程度...
  • actual_
  • actual_
  • 2011年10月14日 08:49
  • 664

drupal中的IOC控制反转模式

控制反转(IOC)模式(又称DI:Dependency Injection)就是Inversion of Control,控制反转。在Java开发中,IoC意 味着将你设计好的类交给系统去控制,而不是...

IoC模式,控制反转与依赖注入

1.依赖 依赖就是有联系,有地方使用到它就是有依赖它,一个系统不可能完全避免依赖。如果你的一个类或者模块在项目中没有用到它,恭喜你,可以从项目中剔除它或者排除它了,因为没有一个地方会依赖它。下面看一...

IoC(Inversion of Control,控制反转)模式

IoC模式 1.依赖依赖就是有联系,有地方使用到它就是有依赖它,一个系统不可能完全避免依赖。如果你的一个类或者模块在项目中没有用到它,恭喜你,可以从项目中剔除它或者排除它了,因为没有一个地方会依赖它...

IoC模式(依赖、依赖倒置、依赖注入、控制反转)

1.依赖 依赖就是有联系,有地方使用到它就是有依赖它,一个系统不可能完全避免依赖。如果你的一个类或者模块在项目中没有用到它,恭喜你,可以从项目中剔除它或者排除它了,因为没有一个地方会依赖它。下面看一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:控制反转(IoC) ? 工厂模式?
举报原因:
原因补充:

(最多只允许输入30个字)