我试图完全理解控制倒置(IoC)是什么意思,但我有一种感觉,我在互联网上遇到了相互矛盾的定义。
我发现的关于控制反转的每一个解释都提到了依赖注入(DI)。这种情况使我感到困惑,因为它使我看上去是平等的。
根据我的理解,有一些类似于几种类型的IoC,但没有得到明确的提及。
据我所知,倒置控制可能是在:
1.高级组件调用抽象类型上的方法,这些方法执行编译时不知道的实现特定代码(在这里,我仍然很难看到什么是“倒置”的。在这里,文字授权似乎更合适--我并不是在暗示代理模式)。实现对象是在高级组件之外创建的,或者在构造过程中注入,或者使用setter方法(第2点),或者在由子类提供时使用模板模式(我已经看到这种模式被描述为工厂方法模式,只会让我更加困惑)。
2.将抽象类型的实现注入高级组件的过程是IoC本身--只是另一种形式。在这里,控件“反转”到构造此高级组件的对象,或者在创建该控件后向其注入依赖关系的对象。再说一遍,倒过来的话让我很困惑。依赖注入似乎是恰当的词。
我在这里部分地看到了控制的倒置,因为基本上“工作”是由一些具体项目完成的,其中主要组件只知道抽象类型,这些对象是在主类之外创建(从而定义的具体工作)并刚刚提供的。不过,我还是情不自禁地认为这是授权。当我更多地考虑它时,它意味着管理主(高级)组件的对象,意味着它的更高的(mainer:)组件,决定具体的实现,所以反转一词不能指从高级组件接管控制的低级组件,或者它可以吗?
无论如何,这似乎与第三点非常不同。
3.观察员或回调模式。当某个对象请求稍后在发生某些事件时调用时。在我看来,这似乎是真正的控制倒置。因为观察者/回调方法是特定的方法,这些方法不是观察者使用的,而是控制流的其他对象。
我的推理正确吗?观察者模式也采用控制反转吗?依赖注入是控制反转的一种形式吗,正如我在第1和第2点中提到的那样?
发布于 2014-04-02 22:32:12
我同意,倒置是一个误导性的术语。是的,DI是国际奥委会的一种形式。观察者模式使用DI,因为主题耦合到对象(观察者),它需要在运行时通过观察员向主题注册通知。
来自control
控制反转(IoC)是一种在运行时将依赖对象耦合到所需对象的编程技术。 在面向对象的编程中,有几种基本的技术来实现控制反转.它们是: 使用使用依赖注入的服务定位器模式的工厂模式,例如:构造器注入参数注入,设置器注入使用上下文化查找的接口注入,使用使用策略设计模式的模板方法设计模式
发布于 2018-06-14 08:32:10
可能是因为这里的“控件”的含义与我所理解的不同,IoC中的控件指的是代码执行流程、数据检索或与实现细节相关的内容,而不是具体类的创建。
例如,当通过添加实现细节来扩展框架时,框架决定何时调用实现方法或将数据发送给它们,而不是由扩展类来决定时间或如何自己获取数据。从这方面来说,“控制”是颠倒的。
https://stackoverflow.com/questions/22822775
复制相似问题