博客
关于我
Java 回调机制
阅读量:571 次
发布时间:2019-03-11

本文共 2072 字,大约阅读时间需要 6 分钟。

Java 回调机制

在Java核心技术I中接触到了回调这个名词,在这里整理下思路。

1、方法调用的三种方式

软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用

  • 同步调用:即阻塞调用,单向,是最基本并且最简单的一种调用方式,方法 a() 调用方法 b() ,等到 方法 b() 执行完后才继续执行方法 a().
  • 异步调用:即通过异步消息进行通知,通过方法 a() new 一个线程调用方法 b() , 例如微信消息推送的情景。
  • 回调:即双向,调用 + 反调。类A的a()方法调用类B的b()方法, 类B的b()方法执行完毕主动调用类A的callback()方法。

2、例子演示

一个员工做完了手头的工作,发送消息通知,得到回复才可以走人(笑了)。

2.1、回调接口类

/** * 回调模式-回调接口类 */public interface Work {    void goHome(String content);}

2.2、员工工作类,实现回调接口

/** * 回调模式-员工工作类,实现回调接口类 */public class EmployeeWork implements Work{    /**     * 异步调用,发送完成工作的消息     *     * @param content  消息     * @param message  消息处理类     */    public void complete(final String content, final Message message){        //创建线程        new Thread(() -> {            //将员工工作的引用传入消息处理的方法            message.ask(content, EmployeeWork.this);        }).start();        waiting();    }    /**     * 准备回家     */    public void waiting() {        System.out.println("准备回家");    }    /**     * 被回调方法,得到消息可以回家了     * @param content     */    @Override    public void goHome(String content) {        System.out.println("得到通知," + content + "工作,可以下班了");    }}

2.3、消息处理类,这里回调方法。

/** * 回调模式-消息处理类,回调方法 */public class Message {    /**     * 处理消息并回调     *     * @param content 消息     * @param work     回调接口,为了安全向上转型     */    public void ask(String content, Work work) {        if (content.contains("完成")) {            System.out.println("收到" + content + "的通知");            //回调方法            work.goHome(content);        }    }}

2.4、测试类

public class CallBackTest {    public static void main(String[] args) {        EmployeeWork employeeWork = new EmployeeWork();        String content = "完成微信推送";        employeeWork.complete(content, new Message());    }}

输出结果如下:

准备回家收到完成微信推送的通知得到通知,完成微信推送工作,可以下班了

2.5、小结

以上是异步回调的简单示例,回调方法最大的优势在于就在于异步回调,这是其最被广为使用的原因

3、应用场景

  1. Windows平台的消息机制。
  2. 异步调用微信接口,根据微信返回状态对出业务逻辑响应。
  3. Servlet中的Filter(过滤器)是基于回调函数,需容器支持。

4、回调的步骤

  1. A类实现接口CallBack callback。
  2. A类中包含了一个B的引用。
  3. B中有一个参数为CallBack的方法f(CallBack callback)。
  4. 在A类中调用B的方法f(CallBack callback)——注册回调接口。
  5. B就可以在f(CallBack callback)方法中调用A的方法——调用回调接口。

参考文章:

参考博客:

转载地址:http://vugvz.baihongyu.com/

你可能感兴趣的文章
前端框架(react+umi+dva+ant design pro )攻克: 二、react 父子组件通信(二)
查看>>
ant design pro v5去掉右边content区域的水印
查看>>
get/set方法是外界访问对象私有属性的唯一通道,方法内部可对数据进行检测和过滤(代码演示)
查看>>
web_求和(练习)
查看>>
JavaScript——使用iterator遍历迭代map,set集合元素
查看>>
常用的Linux命令
查看>>
STM32外设使用(四) ADC
查看>>
Keil 查看文件路径的方法
查看>>
Risc-V 内核
查看>>
IAR调试卡顿的解决办法
查看>>
应用程序无法启动,应用程序的并行配置不正确完美解决方法
查看>>
【IntelliJ IDEA 2019.2】idea如何开启自动编译
查看>>
强大的文字处理器——Nisus Writer Pro
查看>>
如何轻松适应从Windows到MacOS的过渡!Mac新手入门指南
查看>>
fcpx插件:25个假日主题专业设计
查看>>
fcpx插件:Block Party for Mac(53个视频转场插件)
查看>>
Mac使用技巧:快速视频播放错误如何修护
查看>>
代码绘制五角形
查看>>
Course Schedule II
查看>>
线程总结
查看>>