admin管理员组文章数量:1030587
Java回调方法设计方案(附示例源码)
介绍
该设计使用回调接口的设计思路进行实现,拥有灵活且符合封闭原则的特点,示例的源码中添加了传参的示例,分为两种:
- 通过构造函数传参:
该种方式适用于在主进程或者new回调方法具体实现类的场景下使用,可以用于传输一些在具体实现类中获取不到的参数,亦或者是一些回调方法不同逻辑都通用的参数,例如:当前登录信息的上下文、mapper实例等。
- 通过回调方法进行传参:
这种方式适用于在存在异步操作逻辑中传输异步操作结果,用于在回调方法中针对不同的结果执行不同的业务逻辑,同时需要注意对参数进行校验。
源码
回调接口类
代码语言:java复制public interface ICallBack {
Object run(Object ...params);
}
回调接口实现类
代码语言:java复制public class TestICallBackImpl implements ICallBack {
private String classParam;
public TestICallBackImpl() {
}
public TestICallBackImpl(String classParam) {
this.classParam = classParam;
}
@Override
public Object run(Object... params) {
if (params != null && params.length == 2){
System.out.println("TestCallBack classParam:" + classParam);
System.out.println("TestCallBack params:" + Arrays.toString(params));
return true;
}
return false;
}
}
存在异步逻辑的示例类
代码语言:java复制public class Request {
public void send(ICallBack ICallBack) throws Exception {
Thread.sleep(3000);
System.out.println("[Request]:收到响应");
ICallBack.run("这是调用者传过去的参数",123456789);
}
}
主函数
代码语言:java复制public class CallBackTest {
public static void main(String[] args) throws InterruptedException {
Request request = new Request();
System.out.println("[Main]:我开个线程去异步发请求");
ICallBack ICallBack = new TestICallBackImpl("这是主进程传过去的参数");
new Thread(() -> {
try {
request.send(ICallBack);
} catch (Exception e) {
e.printStackTrace();
}
}).start();
System.out.println("[Main]:请求发完了,我去干点别的");
Thread.sleep(100000);
}
}
示例执行结果
代码语言:bash复制[Main]:我开个线程去异步发请求
[Main]:请求发完了,我去干点别的
[Request]:收到响应
TestCallBack classParam:这是主进程传过去的参数
TestCallBack params:[这是调用者传过去的参数, 123456789]
结语
通过上方的设计思路可以帮助处理异步操作逻辑的执行结果,例如:远程接口请求。示例中的主进程中新起了一个线程,这里的作用是模拟远程接口请求,读者在具体实现时可不必要另起一个线程。
Java回调方法设计方案(附示例源码)
介绍
该设计使用回调接口的设计思路进行实现,拥有灵活且符合封闭原则的特点,示例的源码中添加了传参的示例,分为两种:
- 通过构造函数传参:
该种方式适用于在主进程或者new回调方法具体实现类的场景下使用,可以用于传输一些在具体实现类中获取不到的参数,亦或者是一些回调方法不同逻辑都通用的参数,例如:当前登录信息的上下文、mapper实例等。
- 通过回调方法进行传参:
这种方式适用于在存在异步操作逻辑中传输异步操作结果,用于在回调方法中针对不同的结果执行不同的业务逻辑,同时需要注意对参数进行校验。
源码
回调接口类
代码语言:java复制public interface ICallBack {
Object run(Object ...params);
}
回调接口实现类
代码语言:java复制public class TestICallBackImpl implements ICallBack {
private String classParam;
public TestICallBackImpl() {
}
public TestICallBackImpl(String classParam) {
this.classParam = classParam;
}
@Override
public Object run(Object... params) {
if (params != null && params.length == 2){
System.out.println("TestCallBack classParam:" + classParam);
System.out.println("TestCallBack params:" + Arrays.toString(params));
return true;
}
return false;
}
}
存在异步逻辑的示例类
代码语言:java复制public class Request {
public void send(ICallBack ICallBack) throws Exception {
Thread.sleep(3000);
System.out.println("[Request]:收到响应");
ICallBack.run("这是调用者传过去的参数",123456789);
}
}
主函数
代码语言:java复制public class CallBackTest {
public static void main(String[] args) throws InterruptedException {
Request request = new Request();
System.out.println("[Main]:我开个线程去异步发请求");
ICallBack ICallBack = new TestICallBackImpl("这是主进程传过去的参数");
new Thread(() -> {
try {
request.send(ICallBack);
} catch (Exception e) {
e.printStackTrace();
}
}).start();
System.out.println("[Main]:请求发完了,我去干点别的");
Thread.sleep(100000);
}
}
示例执行结果
代码语言:bash复制[Main]:我开个线程去异步发请求
[Main]:请求发完了,我去干点别的
[Request]:收到响应
TestCallBack classParam:这是主进程传过去的参数
TestCallBack params:[这是调用者传过去的参数, 123456789]
结语
通过上方的设计思路可以帮助处理异步操作逻辑的执行结果,例如:远程接口请求。示例中的主进程中新起了一个线程,这里的作用是模拟远程接口请求,读者在具体实现时可不必要另起一个线程。
本文标签: Java回调方法设计方案(附示例源码)
版权声明:本文标题:Java回调方法设计方案(附示例源码) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/jiaocheng/1747665285a2200748.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论