观察者模式中应用的控制反转

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

控制反转的每一个解释我都发现提到了依赖注入(DI)。 这种混淆使我看起来像是平等的事情。

在我的理解中,有几种类型的IoC没有明确提及。

从我所了解的控制反转可能是:

1.高级组件调用抽象类型的方法,它执行在编译时不知道的特定于实现的代码(我在这里看到什么是“倒置的”,仍然存在问题,这里的代码似乎更加贴切 - 我不是暗示Delegator模式)。 实现对象是在高级组件外部创建的,并且在构造或使用setter方法(点2)时注入,或者当它们由子类提供时使用Template模式(我已经将该模式描述为Factory方法,这只会让我困惑更多)。

2.将抽象类型的实现注入高级组件的过程是IoC本身 - 只是另一种形式。 在这里,控制被“倒置”到构造这个高级组件的对象上,或者在它被创建之后用依赖关系注入它。 再一次的话倒是让我感到困惑。 依赖注入看起来像是一个词。

我在这里部分地看到了控制的倒置,因为基本上“工作”是由一些具体的项目完成的,主要组件只知道抽象类型,并且这些对象是在主类之外创建的(并且因此定义了具体的工作)并且仅仅提供。 尽管如此,我仍然忍不住把这看作是委托。 而当我更多地考虑它时,意味着管理主要(高级)组件的对象,意味着它更高(更大):)组件,决定了具体实现,因此术语反转不能引用低级组件从高级组件控制过来还是可以的?

无论如何,它似乎与第3点非常不同。

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

我的推理是否正确? Observer模式是否也使用控制反转? 依赖注入是控制反转的一种形式,就像我在第1和第2点中提到的那样?


我同意,倒置是一个误导性的术语。 是DI是IOC的一种形式。 观察者模式使用DI,因为主体与运行时需要通过观察者向主体注册的对象(观察者)耦合。

来自http://en.wikipedia.org/wiki/Inversion_of_control

控制反转(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
链接地址: http://www.djcxy.com/p/82241.html

上一篇: Inversion of control applied in Observer pattern

下一篇: Does this violate the "Dependency Inversion Principle"?