gpt4 book ai didi

asynchronous - 如何在 Java 中实现回调

转载 作者:行者123 更新时间:2023-12-04 02:40:16 27 4
gpt4 key购买 nike

我有一个名为 CommunicationManager 的类,它负责与服务器的通信。

它包括方法 login()onLoginResponse() .如果用户登录,方法login()必须被调用并且当服务器响应方法onLoginResponse()被执行。

我想要做的是将操作与用户界面绑定(bind)。在 GUI 类中,我创建了一个名为 mCommunicationManager 的 CommunicationManager 实例。 .来自 GUI 类 login()方法只是由该行调用

mCommunicationManager.login();

我不知道如何将 GUI 类中的方法绑定(bind)到 onLoginResponse() .例如,如果 GUI 类包含方法 notifyUser()显示从服务器收到的消息。

如果有人能展示如何绑定(bind)方法以便在类的实例 GUI.notifyUser() 时从 GUI 类(例如 mCommunicationManager )执行方法,我将不胜感激。接收来自服务器的消息和方法 CommunicationManager.onLoginResponse()被执行。

谢谢!

最佳答案

这里有两种模式我可以看到你使用。一种是publish/subscribe or observer pattern皮特提到的。我认为这可能是您想要的,但是看到问题提到绑定(bind)方法以供以后执行,我想我应该提到 Command pattern .

命令模式基本上是一种解决方法,因为 java 不将方法(函数)视为第一类对象,因此不可能传递它们。相反,您创建一个可以传递的接口(interface),它封装了有关如何调用原始方法的必要信息。

所以对于你的例子:

 interface Command {
public void execute();
}

然后在执行 login() 时传入此命令的实例函数(未经测试,我总是忘记如何正确获取匿名类):
 final GUI target = this;
command = new Command() {
@Override
public void execute() {
target.notifyUser();
}
};
mCommunicationManager.login(command);

在 login() 函数中(管理器保存对命令的引用):
public void login() {
command.execute();
}

编辑:
我应该提一下,虽然这是对其工作原理的一般解释,但在 Java 中已经有一些为此目的的管道,即 ActionListener和相关类( actionPerformed() 基本上是 execute() 中的 Command )。这些主要用于 AWT 和/或 Swing 类,因此具有特定于该用例的功能。

关于asynchronous - 如何在 Java 中实现回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1476170/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com