最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Java回调方法设计方案(附示例源码)

网站源码admin1浏览0评论

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]

结语

通过上方的设计思路可以帮助处理异步操作逻辑的执行结果,例如:远程接口请求。示例中的主进程中新起了一个线程,这里的作用是模拟远程接口请求,读者在具体实现时可不必要另起一个线程。

发布评论

评论列表(0)

  1. 暂无评论