java 回调机制(callback)

对算法工作台recadmin来说,callback很重要

模块间调用方式:

同步调用、异步调用、回调

回调的思想:

  • 类A的a()方法调用类B的b()方法

  • 类B的b()方法执行完毕主动调用类A的callback()方法

这样一种调用方式组成了上图,也就是一种双向的调用方式,使用过程中调用方式可以是方法、http、https、rpc等

栗子: 有两个模块,模块1让模块2去做一个任务,任务完成后告诉模块1,模块1知道结果再做相应操作。实际生活中,比如:老师(模块1)问问题,学生(模块2)回答问题,并且告诉老师回答完成

代码示例:

首先定义一个回调接口IStudent,只有一个方法tellAnswer(int answer)即:学生回答完毕告诉老师答案

扫描二维码关注公众号,回复: 3079328 查看本文章
@FunctionalInterface

public interface Istudent{

    public void tellAnswer(int answer);

}

定义一个学生类Student

public class Student implements Istudent{

public void call() {

    new Server(this).tellAnswer();//传递this

}

@Override

public void tellAnswer(int i) {

    System.out.println(i+"0%");

    }
}

服务类(老师类)

public class Server{//导演

private List listeners = new ArrayList();//电话簿

/**

* 监听器注册

* 需要回答问题的学生进行注册

*/

public void register(IStudent listener) {

    listeners.add(listener);

}

public void askProblem(){//某种状态发生改变

    for(IStudent x: listeners) {

    x.tellAnswer(12345);

    }
}

测试一下

class TestCallback{

@Test

    public static void test() {        

        Server s =new Server();        

//注册3个需要回答问题的学生

        Istudent student1=(i)->{System.out.println("+" + i + "0%");};

        s.register(student1);

        s.register((i)->{System.out.println("++" + i + "0%");});

        s.register(new Istudent(){

             @Override public void tellAnswer(int i){

                 System.out.println("==" + i + "0%");

             }

        });

//问问题

        s.askProblem();        

}

猜你喜欢

转载自blog.csdn.net/qq_21319187/article/details/82429955