解决java中的循环依赖

时间:2015-10-23 14:55:43

标签: java design-patterns

我有三个课程,比如ABC。基本思路是,课程A会将邮件传递给B并根据该邮件等待B将邮件传递给C。最后,在C处理邮件后,它会通知A继续使用它的功能。现在形成了一个圆圈。为了减少依赖性,我让类A通过BC进行通信,即C有一个方法将A的消息传递给{{} 1}}。这种方法的问题在于它暴露了BB的接口,我不想发生这种接口。我的问题是,解决这个问题的最佳方法是什么。

为了提供更多背景信息,我正致力于语音识别系统。我从2个类开始,一个用于获取识别结果(A)另一个用于处理结果。后来我不得不打破将结果处理为2的类,一个进行一些预处理(A),比如检查结果有多好,另一个处理结果(B

3 个答案:

答案 0 :(得分:1)

如果AC在同一个JVM中运行,您可以在邮件本身中添加一个方法,以便B可以调用该方法而无法直接访问A

您还可以查看访客模式或消息总线。

答案 1 :(得分:1)

控制倒置

class Controller {
    A a;
    B b;
    C c;

    private void injectControll() {
        a.registerListener(b); // a.passTo(b);
        b.registerListener(c);
        c.registerListener(a);
    }

答案 2 :(得分:1)

您可以在服务/类之间发送相应的消息。但是,在收到消息之前,请不要阻止您的应用程序。使用回调对象作为通信机制。

  1. A向B发送消息并传递回叫参数。 A将继续而不等待。

  2. B向C发送消息并传递回调参数。 B将继续,无需等待。

  3. C处理消息并通过回叫确认时向A发送消息。

  4. A将处理回调通知。