大牛吹了那么久的ioc,今天才了解那么点点。

实际上IOC就是工厂模式的进化,
即将创建对象跟使用对象分割。

如果说工厂模式还不能彻底解决耦合,因为客户端会和工厂类耦合,那 IOC 则进一步了,如果客户端和

被调用者都 IOC 容器内,则客户端就只和具体被调用者得接口耦合,OO中同步系统目前做到和接口耦合

就算是松耦合了(JMS等异步则完全解耦)。

比如我下一次要用到这次系统的几个类,如果在工厂模式下

object object=Factory.getObject("beanname");
而IOC下,
只需在配置文件中指定
<bean class="*.*.*.object"><property name="object">重用类</property></bean>
即可,
而object更可为一个接口,那么在不同的系统中,需要重用的类只需实现此接口就可以了。
从而实现dependency injection中所描述的,插件构造系统。
此谓之插件组合系统,是因为集成了很多个可以重用的类,从而使得这些重用的类成为“插件”,而当

前系统只需实现这些类的接口即可拔插组件。

依赖注射 :垃圾回收机制的镜像
Dependency Injection -- the mirror of Garbage Collection

作者使用垃圾回收机制做比喻,通过引入这个机制,解放了开发者,开发者不用再照顾垃圾回收这个问

题; IOC 则起到同样效果,开发者不用再关系对象之间依赖了,只管使用就可以了。

IOC容器就是预先将需要调用的类装入其中,就像个蒸笼,要拿包子的时候从里面拿就是了,不对,应该

是个自动送包子的蒸笼,我只要在我座位上标志我像吃包子了,这个蒸笼就自己把包子给我端上来了。

一个是抽象一个是实体,这么让抽象关联上实体?new。但是这样维护性降低了很多,所以将这个关系拿

到IOC容器中去,好办多了。

我的总结:

ioc的美德就是一个字:懒。

每个模块只关心自己那一点点功能。遇到须要别的功能的,什么是最简单的办法?
狮子大开口,定义一个接口,说:我要这个功能。
然后要求构造函数传递进来就行了。

有比这更省事的吗?为什么我们的程序员总是学不会懒惰呢?

多年的面向过程,面向实现的训练让他们遇事都是老老实实地想着直接去解决。从来没有想过有时候做

一件事情比不做一件事情糟糕得多!

ps:哈哈,ajoo说出了我很想说的一气话!!再翻翻martin的例子,插件?对了啊!就是少写点代码要更

多功能就张开嘴巴挂个牌子吧,我还要这个功能,给我吧。在深入下去,martin大师说的例子,本系统

实现一个接口,然后很多实现类,就像我挂牌子说我要吃包子,不管什么包子都可以,今天想吃韭菜的

,每天想吃肉的,反正只要实现包子接口的我都吃,只是偶尔跟心情有关系罢了。拿我朋友也想吃包子怎

么办?他也张开嘴巴挂个牌子说“我要吃包子。”嘛,朋友不喜欢吃韭菜跟肉的,而喜欢吃豆沙的怎么

办?那他自己叫人做些吧,反正只要学我的张开嘴巴挂个牌子就能吃了(只是苦了那个做包子的),只

要做好包子就够啦,想想也是,如果一方面要考虑包子怎么做,又要考虑是拿手掰开吃还是拿筷子夹着

吃,那可真累人,现在好啦,他只要重复我的绝大多数动作就够啦。

废话了一大堆,原来martin考虑得那么深啊,不仅把ajoo说的“懒”字当头说通了,而且还说了同一种

功能有X种实现的时候,我们应该做个统一接口以方便以后使用不同功能。

总之,对象在编码实现的时候,对象创建根本不需要我操作,直接拿来用就是了,就像小吃店蒸笼里的

包子,拿来就可以吃了,而不要重新做包子。使得一个个包子都成为插件。有了IOC,你难道不想多用几

次以前写过的代码吗?

总结那么久,IOC原理有2大好处。
1、功能更内聚(几乎都一块一块的了),使得重用性更高。
2、功能更具有多态性,比如只要实现一个接口只需injection进去就可以实现同样方法却调用不同资源

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【1】项目代码完整且功能都验证ok,确保稳定可靠运行后才上传。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,帮助解答。 【2】项目主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 【3】项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 【4】如果基础还行,或热爱钻研,可基于此项目进行二次开发,DIY其他不同功能,欢迎交流学习。 【注意】 项目下载解压后,项目名字和项目路径不要用中文,否则可能会出现解析不了的错误,建议解压重命名为英文名字后再运行!有问题私信沟通,祝顺利! 基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值