IOC模式理解
理解IOC inversion of control 控制反转 与 DI Dependency Injection 依赖注入概念之前,我们需要知道在一个系统的设计过程中,降低各模块之间的相互依赖,达到高内聚低耦合,是判断设计好坏的标准;
所以Robert Martin大师提出了面向对象设计原则----依赖倒置原则:
- A. 上层模块不应该依赖于下层模块,它们共同依赖于一个抽象。
- B. 抽象不能依赖于具象,具象依赖于抽象
这其实就是要求系统设计中面向接口编程思想的一种表达,而IOC模式则把这种思想进一步贯彻和实现。
一般的程序实现,两个模块之间可以是高度耦合的

设计接口,引入IOC容器管理和实例化接口对象,在IOC容器中把实例化的B对象注入模块A中

这里我们可以看到,模块A依赖与外部容器(IOC容器)实例化并注入它所需要的外部资源,而所谓的控制反转与依赖注入则是对同一概念不同角度的理解;控制反转意味着原来应该由模块A主动实例化对象,改由IOC容器去实现,控制权由原来的A模块变为了容器,从而达到了A模块与B模块之间的解耦;依赖注入则是对于模块A来讲,它需要依赖于IOC容器创建它需要的对象,并注入到自身当中;
其实大家对IOC更多的是需要从思想层面上去理解,控制权的反转的目的是要达到模块间的解耦,模块之间是感受不到对方存在的,对象的创建、生命周期的管理全都有IOC容器来管理,上层模块调用底层模块时,需要依靠IOC容器创建并注入;
这一篇文章我们大致了解了IOC模式,下一篇我们看下.NET下IOC框架Autofac的使用。
IOC模式理解的更多相关文章
- IoC模式(依赖、依赖倒置、依赖注入、控制反转)
1.依赖 依赖就是有联系,有地方使用到它就是有依赖它,一个系统不可能完全避免依赖.如果你的一个类或者模块在项目中没有用到它,恭喜你,可以从项目中剔除它或者排除它了,因为没有一个地方会依赖它.下面看一个 ...
- [转]IoC模式
IoC模式 1.依赖 依赖就是有联系,有地方使用到它就是有依赖它,一个系统不可能完全避免依赖.如果你的一个类或者模块在项目中没有用到它,恭喜你,可以从项目中剔除它或者排除它了,因为没有一个地方会依赖它 ...
- IoC模式
1.依赖 依赖就是有联系,有地方使用到它就是有依赖它,一个系统不可能完全避免依赖.如果你的一个类或者模块在项目中没有用到它,恭喜你,可以从项目中剔除它或者排除它了,因为没有一个地方会依赖它.下面看一个 ...
- IoC模式(转)
IoC模式 1.依赖 依赖就是有联系,有地方使用到它就是有依赖它,一个系统不可能完全避免依赖.如果你的一个类或者模块在项目中没有用到它,恭喜你,可以从项目中剔除它或者排除它了,因为没有一个地方会依赖它 ...
- IoC模式(Inversion of Control)
1.依赖 依赖就是有联系,有地方使用到它就是有依赖它,一个系统不可能完全避免依赖.如果你的一个类或者模块在项目中没有用到它,恭喜你,可以从项目中剔除它或者排除它了,因为没有一个地方会依赖它.下面看 ...
- IoC模式(控制反转)(转)
转自:http://www.cnblogs.com/qqlin/archive/2012/10/09/2707075.html,写的很好,用C#代码解释控制反转,然后更进一步,提到依赖注入是控制反转的 ...
- Spring的IoC模式
1.依赖 依赖就是有联系,有地方使用到它就是有依赖它,一个系统不可能完全避免依赖.如果你的一个类或者模块在项目中没有用到它,恭喜你,可以从项目中剔除它或者排除它了,因为没有一个地方会依赖它.下面看一个 ...
- 深入理解IOC模式及Unity框架
研究了下,有几篇博客确实已经说得很清楚了 1.IoC模式:http://www.cnblogs.com/qqlin/archive/2012/10/09/2707075.html 这篇博客是通过一个 ...
- laravel 服务容器实例——深入理解IoC模式
刚刚接触laravel,对于laravel的服务容器不是很理解.看了<Laravel框架关键技术解析>和网上的一些资料后对于服务容器有了一些自己的理解,在这里分享给大家 1.依赖 IoC模 ...
随机推荐
- vue2+swiper(用户操作swiper后,不能autoplay了)
将autoplayDisableOnInteraction设置为false
- css 弹性盒兼容性写法,直接复制粘贴
看这个定义弹性布局盒子display:-webkit-box; display: -moz-box; display: -ms-flexbox; display: -webkit-flex; disp ...
- memcached常用命令
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt104 一.Memcache面向对象的常用接口包括:Memcache::con ...
- 构建具有用户身份认证的 React + Flux 应用程序
原文:Build a React + Flux App with User Authentication 译者:nzbin 译者的话:这是一篇内容详实的 React + Flux 教程,文章主要介绍了 ...
- 小程序脚本语言WXS详解
WXS脚本语言是 Weixin Script脚本的简称,是JS.JSON.WXML.WXSS之后又一大小程序内部文件类型.截至到目前小程序已经提供了5种文件类型. 解构小程序的几种方式,其中一种方式就 ...
- C# 文件的操作
C#对文件的操作相当方便,主要涉及到四个类:File.FileInfo.Directory.DirectoryInfo,前两个提供了针对文件的操作,后两个提供了针对目录的操作,类图关系如上图所示; 下 ...
- 微软为啥让免费升Win10?
今天终于赶在截止日期之前把我的联想PC升到win10.微软这次对中国开放的持续一年的免费升级活动主要有两个原因.首先当然是"感恩Windows用户长久支持的回馈".微 ...
- 201521123060 《Java程序设计》第6周学习总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 2. 书面作业 1.clone方法 1.1 Object对 ...
- 201521123111《Java程序设计》第6周学习总结
1. 本章学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...
- 201521123077 《Java程序设计》第2周学习总结
1. 本周学习总结 动态数组 标识控制符的意义 ArrayList ,BigDecimal,BigInteger 等类的使用 组合,继承,多态等概念的了解 2. 书面作业 Q1.使用Eclipse关联 ...