Callback机制

模块之间总是存在这一定的接口,从调用方式上看,可以分为三类:同步调用、回调和异步调用
1.同步调用是一种阻塞式调用,也是我们在写程序中经常使用的
2.回调是一种双向的调用模式,也就是说,被调用的接口被调用时也会调用对方的接口
3.异步调用是一种类似消息或事件的机制,解决了同步阻塞的问题
举例来讲:A通知B后,他们各走各的路,互不影响,不用像同步调用那样,A通知B后,非得等到B走完后,A才继续走

Paste_Image.png

同步和异步机制的出现不必多说,大家心知肚明,那回调机制为什么会出现呢?在我们现实生活中,有如下这样场景:有一位老板很忙,他没有时间盯着员工干活,然后他告诉自己的雇员,干完当前这些事情后,告诉他干活的结果。这个例子其实是一个回调+异步的例子,再举一个例子,A程序员写了一段程序a,其中预留了回调函数接口,并封装好了该程序,程序员B让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法,到这里你可能似懂非懂了,后面会继续说明回调的出现原因。接下来我们把上面例子变成代码,看到网上很多人最后搞混了异步和回调,因此例子中不加入异步调用。(注意:回调可不是解决什么调用时间过长问题,那是异步!)

首先创建一个接口:老板需要在员工干完活之后被通知到

public interface CallBackInterface {
    public void solve(String str);
}

创建回调对象:老板,因为员工干完活后要电话老板告诉他活已经干完

/**
 * 老板是作为上层应用身份出现的,下层应用(员工)是不知道 有哪些方法,因此他想被下层应用(员工)调用必须实现此接口 
 */
public class Boss implements CallBackInterface{
    private Employee employee;
    public Boss(Employee employee) {
        this.employee = employee;
    }
    //boss吩咐员工做事
    public void tellToDo(String str){
        System.out.println("boss吩咐员工"+str);
        employee.doThing(this, str);
    }
    //员工做完之后,回调此方法告诉boss事情已近刚做完
    @Override
    public void solve(String str) {
        System.out.println("员工做完之后,回调此方法告诉Boss");
    }
}

创建控制对象:员工,他必须持有老板的地址(回调接口),即使老板换了一茬又一茬,办公室不变,总能找到对应的老板

public class Employee{
    public void doThing(CallBackInterface callBackInterface,String str){
        System.out.println("员工干活:"+str+"干完之后,通知Boss做好了");
        callBackInterface.solve(str);
    }
}

代码测试

public class TestCallBack {
    public static void main(String[] args) {
        Employee employee = new Employee();
        Boss boss = new Boss(employee);
        boss.tellToDo("拖地");
    }
}

执行结果

boss吩咐员工拖地
员工干活:拖地干完之后,通知Boss做好了
员工做完之后,回调此方法告诉Boss
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,800评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,242评论 18 399
  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 14,751评论 0 15
  • 聚散 私人日志 2011-03-03 17:24:05| 分类: 默认分类 字号 下载LOFTER我的照片书...
    渔夫一七阅读 1,326评论 0 0
  • 与网站目标关键词相对应,能带来流量的关键词叫长尾关键词。长尾关键词带来的客户,转化为网站产品客户的概率比目...
    小豆233阅读 3,897评论 0 1