栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

回调函数—Java实现

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

回调函数—Java实现

1 回调函数的概念
  • 同步调用
    • 一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用
  • 异步调用
    • 一种类似于消息或者时间的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方。
  • 回调
    • 一种双向调用模式,被调用方在接口被调用时也会调用对方的接口
2 回调函数的demo

手机购买商品正常下单付款后,会反馈给用户一个扣款成功的提醒

2.1 同步回调
//自定义Callback接口
package demo;

public interface Callback {
    public void process(String msg);
}
//实现Callback接口的实现类
package demo;

public class MyCallback implements Callback{
    @Override
    public void process(String msg) {
        System.out.println("回调:" + msg);
    }
}
//客户端
package demo;

public class User {
    private String name;
    private App app;
    public User(String name, App app){
        this.name = name;
        this.app = app;
    }

    public void buy(String thing){
        System.out.println("用户端:购买" + thing);
        app.order(new MyCallback(), thing);  //被调用方的接口
        System.out.println("用户端:物品购买中,请耐心等待");
    }
}
//服务端
package demo;

public class App {
    public void order(Callback callback, String thing){
        //模拟工作
        System.out.println();
        try {
            System.out.println("服务端:" + thing + "下单中......");
            Thread.sleep(5000);  //模型下单处理
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //回调操作,反馈信息
        System.out.println();
        callback.process("扣款成功");
    }
}
//测试
package demo;

public class Test {
    public static void main(String[] args) {
        App app = new App();
        User mx = new User("mx", app);
        mx.buy("可乐");
    }
}
//执行结果
用户端:购买可乐

服务端:可乐下单中......

回调:扣款成功
用户端:物品购买中,请耐心等待

其实这里可以发现,由于程序是同步运行的,所以用户端:物品购买中,请耐心等待该执行逻辑放在了最后,但实际上是不符合常理的。在用户确认购买后就应该执行,而不是扣完钱还要让用户等待。现采用异步回调修改上述User的代码。

2.2 异步回调
package demo;

public class User {
    private String name;
    private App app;
    public User(String name, App app){
        this.name = name;
        this.app = app;
    }

    public void buy(String thing){
        System.out.println("用户端:购买" + thing);
        new Thread(new Runnable() {
            @Override
            public void run() {
                app.order(new MyCallback(), thing);
            }
        }).start();
        System.out.println("用户端:物品购买中,请耐心等待");
    }
}
//执行结果
用户端:购买可乐
用户端:物品购买中,请耐心等待

服务端:可乐下单中......

回调:扣款成功
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/930297.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号