如何避免来自流的循环调用?

时间:2016-12-22 16:37:35

标签: java design-patterns

下面提到了4个课程 -

  • A类有2个方法f1()和f2()。
  • B类,方法为f3()。
  • C类,方法为f4()。
  • D类,方法为f5()。

现在关于上述类的情况如下:

  1. f1()调用f3()。
  2. f3()调用f4()。
  3. f4()调用f5()。
  4. f5()调用f2()。
  5. 这是一个糟糕的设计吗?如果是的话,如何改进这种设计?

2 个答案:

答案 0 :(得分:0)

这取决于案例,但在大多数情况下,你应该避免这种设计。

我们需要有关类之间关系的更多信息。我想,你可以通过使用观察者模式或使用return语句来解决这种情况。

示例:

A contains B, C, D => in that case, B, C and D should not know each other

A contains B
B contains C
C contains D
D should not know A or B. In most cases D should not even know C.

MVC模式: 模型包含原始数据,不需要调用View或Controller的功能。如果需要观察模型的变化,请使用obersver模式(事件监听器)。

View知道如何显示数据,并且在大多数情况下,它使用观察者模式在模型更改时得到通知。

每个Controller都知道他的View和can call方法。 Controller也知道模型并可以更改数据。

M不包含对V和C的直接引用 V可以是M的观察者,并且V知道C是可能的 C可以调用M和V的方法,大多数情况下V调用C而C调用M.

答案 1 :(得分:0)

根据jaco0646在评论部分中分享的链接,我得到了以下解决方案。如果有人有不同的想法,请分享。

这种循环关系需要持续的意识。大多数循环依赖项可以通过这种方式重构:

1)在上面的场景中,我们有A和D类相互依赖,选择任何类,

2)确定A和D所依赖的该类中的方法,即在这种情况下方法f2()

3)将这些方法提取到新的E类中,

4)使A和D都依赖于E,

5)A类和E类之一仍然依赖于另一类,但循环依赖性将被消除。