Design patterns 逆控制在观测器模式中的应用

Design patterns 逆控制在观测器模式中的应用,design-patterns,inversion-of-control,observer-pattern,Design Patterns,Inversion Of Control,Observer Pattern,我试图完全理解控制反转(IoC)的含义,但我有一种感觉,我在互联网上遇到了相互矛盾的定义 我找到的每一个关于控制反转的解释都提到依赖注入(DI)。这让我很困惑,因为它让我觉得这是一件平等的事情 据我所知,有几类国际奥委会没有明确提及 据我所知,控制反转可能发生在以下情况: 1.高级组件调用抽象类型上的方法,这些抽象类型执行编译时未知的特定于实现的代码(我仍然看不出这里的“反向”是什么。这里的“委托”一词似乎更合适——我不是在暗示Delegator模式)。实现对象是在高级组件之外创建的,或者在其构

我试图完全理解控制反转(IoC)的含义,但我有一种感觉,我在互联网上遇到了相互矛盾的定义

我找到的每一个关于控制反转的解释都提到依赖注入(DI)。这让我很困惑,因为它让我觉得这是一件平等的事情

据我所知,有几类国际奥委会没有明确提及

据我所知,控制反转可能发生在以下情况:

1.高级组件调用抽象类型上的方法,这些抽象类型执行编译时未知的特定于实现的代码(我仍然看不出这里的“反向”是什么。这里的“委托”一词似乎更合适——我不是在暗示Delegator模式)。实现对象是在高级组件之外创建的,或者在其构建过程中注入,或者使用setter方法(第2点),或者使用模板模式(当它们由子类提供时)(我已经看到将此模式描述为工厂方法模式,这只会让我更加困惑)

2.将抽象类型的实现注入高级组件的过程就是IoC本身——这只是另一种形式。在这里,控件被“反转”为对象,这些对象构造了这个高级组件,或者在创建之后将依赖项注入其中。“倒转”这个词对我来说又是一个困惑。依赖注入似乎是个恰当的词

我在这里看到了部分控制反转,基本上“工作”是由一些具体的项目完成的,主要组件只知道抽象类型,这些对象是在主类之外创建的(因此定义了具体工作),并且只是提供。但我还是忍不住认为这是授权。当我进一步思考它时,它意味着管理主(高级)组件的对象,也就是它的更高(主:)组件,决定了具体的实现,所以术语反转不能指从高级组件接管控制的低级组件,或者可以吗

无论如何,它似乎与第三点大不相同

3.观察者或回调模式。当某个对象请求稍后在某个事件发生时调用时。对我来说,这似乎是真正的控制反转。因为observer/callbacks方法特别是observer不使用的方法,而是控制流的其他对象使用的方法


我的推理正确吗?观察者模式是否也采用控制反转?依赖注入作为控制反转的一种形式是否如我在第1点和第2点中提到的那样?

我同意,反转是一个误导性的术语。是的,DI是国际奥委会的一种形式。观察者模式使用DI,因为主体与对象(观察者)耦合,它需要在运行时由向主体注册的观察者通知对象(观察者)

控制反转(IoC)是一种编程技术,其中 依赖对象在运行时耦合到它所需的对象

在面向对象编程中,有几种基本技术 实现控制反转。这些是:

Using a factory pattern
Using a service locator pattern
Using a dependency injection, for example:
    A constructor injection
    Parameter injection
    A setter injection
    An interface injection
Using a contextualized lookup
Using Template method design pattern
Using strategy design pattern
也许是因为这里的“控制”与我的理解不同,IoC中的控制指的是代码执行流、数据检索或与实现细节相关的东西,而不是具体类的创建

例如,当通过添加实现细节来扩展框架时,框架决定何时调用实现方法或向它们发送数据,而不是由扩展类自己决定时间或如何获取数据。从这个角度来看,“控制”是颠倒的