我有三个课程,比如A
,B
和C
。基本思路是,课程A
会将邮件传递给B
并根据该邮件等待B
将邮件传递给C
。最后,在C
处理邮件后,它会通知A
继续使用它的功能。现在形成了一个圆圈。为了减少依赖性,我让类A
通过B
与C
进行通信,即C
有一个方法将A
的消息传递给{{} 1}}。这种方法的问题在于它暴露了B
到B
的接口,我不想发生这种接口。我的问题是,解决这个问题的最佳方法是什么。
为了提供更多背景信息,我正致力于语音识别系统。我从2个类开始,一个用于获取识别结果(A
)另一个用于处理结果。后来我不得不打破将结果处理为2的类,一个进行一些预处理(A
),比如检查结果有多好,另一个处理结果(B
)
答案 0 :(得分:1)
如果A
和C
在同一个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)
您可以在服务/类之间发送相应的消息。但是,在收到消息之前,请不要阻止您的应用程序。使用回调对象作为通信机制。
A向B发送消息并传递回叫参数。 A将继续而不等待。
B向C发送消息并传递回调参数。 B将继续,无需等待。
C处理消息并通过回叫确认时向A发送消息。
A将处理回调通知。