java回调

来源:互联网 发布:淘宝屏蔽粉丝数 编辑:程序博客网 时间:2024/06/05 16:58

回调的思想是:

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

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

也就是一种双向的调用方式。

代码模拟的是这样一种场景:老师问学生问题,学生思考完毕回答老师。

UML类图如下:

这里写图片描述

回调示意图如下:

这里写图片描述

java代码:

回调接口:

package demo6;/** *  * @ClassName: Callback * @Description: 回调接口 * @author cheng * @date 2017年8月11日 下午6:57:04 */public interface Callback {    /**     *      * @Title: answer     * @Description:回调函数     */    void answer(String answer);}

教师类:

package demo6;/** *  * @ClassName: Teacher * @Description:教师 * @author cheng * @date 2017年8月11日 下午6:58:50 */public class Teacher implements Callback {    //持有学生类的引用    private Student student;    public Teacher(Student student) {        this.student = student;    }    /**     *      * @Title: request     * @Description:问问题     */    public void request() {        String question = "111 * 2 = ?";        student.think(this, question);    }    /**     * 收到答案     */    @Override    public void answer(String answer) {        System.out.println("知道啦,你的答案是:" + answer);    }}

学生类:

package demo6;/** *  * @ClassName: Student * @Description:学生 * @author cheng * @date 2017年8月11日 下午7:00:39 */public class Student {    /**     *      * @Title: think     * @Description: 思考     * @param callback     * @param question     */    public void think(Callback callback, String question) {        System.out.println("老师你的问题是:" + question);        System.err.println("正在思考.............");        String answer = "222";        for (int i = 0; i < 1000000000; i++) {        }        //回调函数        callback.answer(answer);    }}

测试:

package demo6;/** *  * @ClassName: ClientTest * @Description: 测试 * @author cheng * @date 2017年8月11日 下午7:06:51 */public class ClientTest {    public static void main(String[] args) {        Teacher teacher = new Teacher(new Student());        teacher.request();    }}

运行结果:
这里写图片描述

原创粉丝点击