美文网首页
Callback机制

Callback机制

作者: perfect_jimmy | 来源:发表于2017-02-03 16:23 被阅读71次

    模块之间总是存在这一定的接口,从调用方式上看,可以分为三类:同步调用、回调和异步调用
    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
    

    相关文章

      网友评论

          本文标题:Callback机制

          本文链接:https://www.haomeiwen.com/subject/cxudittx.html