接口如何解决循环依赖?

Rap*_*itz 5 circular-dependency

如果您搜索如何解决循环依赖关系,答案几乎总是“使用接口”。我知道如何使用这种技术来使循环依赖起作用,但我不明白这是如何解决循环依赖的。

假设我有 2 个类 View 和 Presenter,它们相互引用。现在我应用“解决方案”并创建接口 IView 和 IPresenter。View不再引用Presenter,而是引用IPresenter;Presenter引用IView而不是View。

  1. 我设置了 View,它需要一个 IPresenter。
  2. 为了实现 IPresenter,我需要设置 Presenter。
  3. 要设置 Presenter,我需要一个 IView。
  4. 为了实现 IView,我需要设置 View。

圆圈变大了,但它仍然存在。View 和 Presenter 仍然相互依赖,只是不是直接依赖。然而,我看到的每一个答案都绝对肯定循环依赖现在已经解决了。我在这里有什么误解?

Rap*_*itz 4

这些循环依赖尚未得到解决。

这些情况下的标准答案是在构造后分配依赖关系。这解决了这些循环依赖项产生的问题,但没有解决循环依赖项本身。

这可能主要是一个语言问题,人们只是说“我解决了 X 和 Y 之间的循环依赖”,而不是“我解决了由于 X 和 Y 之间的循环依赖而遇到的问题”。