回调

引言:在学习Springboot启动原理的时候,总是听到一个'回调'这样一个词,在前端中经常听到,但是在后端听到,还是有一种模棱两可的感觉,于是乎...

1. 同步回调

* 场景:老师问学生问题,学生思考完毕回答老师。
* 流程:
* (1)老师调用学生接口的方法resolveQuestion,向学生提问;
* (2)学生解决完毕问题之后调用老师的回调方法tellAnswer;
* 这样一套流程,构成了一种双向调用的关系。

解释:

  回调的做法是,调用方在调用时,将自己(this)传递给被调用方,这样,当被调用方完成一定的逻辑后,可以通过传递过来的this,回调调用方的方法。

 

Callback:回调接口

package cn.test.call_back;

/**
 * 参考:https://www.cnblogs.com/aademeng/articles/11070081.html
 *
 * 场景:老师问学生问题,学生思考完毕回答老师。
 * 流程:
 *  (1)老师调用学生接口的方法resolveQuestion,向学生提问;
 *  (2)学生解决完毕问题之后调用老师的回调方法tellAnswer;
 *  这样一套流程,构成了一种双向调用的关系。
 *
 * 回调接口:同步回调
 */
public interface Callback {
    /**
     * 回答问题
     * @param answer
     */
    public void tellAnswer(String answer);
}
View Code

Teacher:老师

package cn.test.call_back;

/**
 * @author zls
 * @date 2019/8/20
 */
public class Teacher implements Callback {

    private Student student;

    public Teacher(Student student) {
        this.student = student;
    }

    /**
     * 提出问题
     */
    public void askQuestion() {
        System.out.println("老师提出问题:谁最漂亮?");
        student.resolveQuestion(this);
    }

    @Override
    public void tellAnswer(String answer) {
        System.out.println("这位同学的回答的是:" + answer + "最漂亮!");
    }

}
View Code

Student:学生接口

package cn.test.call_back;

/**
 * 学生接口
 * @author zls
 * @date 2019/8/20
 */
public interface Student {
    /**
     * 解决问题
     * @param callback
     */
    public void resolveQuestion(Callback callback);
}
View Code

Ricky:学生

package cn.test.call_back;

import javax.lang.model.SourceVersion;

/**
 * @author zls
 * @date 2019/8/20
 */
public class Ricky implements Student {
    private String name = "诗云";

    @Override
    public void resolveQuestion(Callback callback) {
        // 模拟解决问题
        try {
            System.out.println(this.name + "思考了5s...");
            Thread.sleep(5000);
            System.out.println("回答到:鞠婧祎最漂亮");

            System.out.println("声音在空气中传播了3s,后老师听到了答案...");
            Thread.sleep(3000);
        } catch (InterruptedException e) {

        }

        // 回调,告诉老师作业写了多久
        callback.tellAnswer("鞠婧祎");
    }

}
View Code

CallbackTest:测试方法

package cn.test.call_back;

/**
 * @author zls
 * @date 2019/8/20
 */
public class CallbackTest {

    public static void main(String[] args) {
        Student student = new Ricky();
        Teacher teacher = new Teacher(student);
        
        teacher.askQuestion();
    }
    /*流程结果打印*/
//    老师提出问题:谁最漂亮?
//    诗云思考了5s...
//    回答到:鞠婧祎最漂亮
//    声音在空气中传播了3s,后老师听到了答案...
//    这位同学的回答的是:鞠婧祎最漂亮!
}
View Code

 

参考:

https://www.cnblogs.com/aademeng/articles/11070081.html

 

转载于:https://www.cnblogs.com/shiyun32/p/11393104.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值