如何理解IoC(Inversion of Control)?

RT,如何理解IoC(Inversion of Control)?如果能写个demo解释最好了。

茅侃侃
浏览 800回答 2
2回答

缥缈止盈

我试着搜了一下,中文资料基本都把IoC(控制翻转)和DI(依赖注入)混为一谈,就连StackOverflow上的第一位答案也犯了同样的问题(幸好下面有高票的反对评论,否则我的世界观都快坏掉了)控制翻转是代码复用的一种模式(注意不是设计模式)一般(非IoC)的复用,通常是用户代码调用组件(任意形式的被复用的代码,本答案中统称为组件)。也就是用户代码解决“Why it works, What to do”,组件解决“How to do”,逻辑的入口是用户代码,而控制翻转则是组件来调用用户代码,也就是组件解决“Why it works, When to do”,用户代码解决“What to do”,逻辑的入口是组件下面是除了DI之外的控制翻转的例子接口/虚函数 组件调用接口/虚函数,具体由用户代码实现发布订阅(事件)模式 组件触发事件,用户代码订阅事件回调 用户代码写回调,组件来调用几乎所有能被称之为框架的东西 用户代码在规定的地方实现具体业务逻辑,剩下的框架负责

料青山看我应如是

通俗的说,一个项目由各个类组成。一个类在一个项目会被很多地方使用。如果按照传统的写法就是每个用的地方都需要 new Class()如果参数很复杂,每个地方都需要new Class(param1, param2, param3, ..)此时每次修改类的构造函数, 那么每个地方需要跟着修改。工作量大,耦合度高。但是可以把需要使用的类,初始化一次,放到一个容器中保存起来,其他需要使用的地方,只需要调用容器的方法Container->getClassINeed()那么,使用这个类和生成这个类通过中间的容器分开了。示例可以看Phalcon框架,文档里给的例子,教你一步步搭建自己的容器一些管理对象生成的设计模式,本身也算一种容器的实现, 例如常见的工厂模式
打开App,查看更多内容
随时随地看视频慕课网APP