回調

引言:在學習Springboot啓動原理的時候,老是聽到一個'回調'這樣一個詞,在前端中常常聽到,可是在後端聽到,仍是有一種模棱兩可的感受,因而乎...html

1. 同步回調前端

* 場景:老師問學生問題,學生思考完畢回答老師。
* 流程:
* (1)老師調用學生接口的方法resolveQuestion,向學生提問;
* (2)學生解決完畢問題以後調用老師的回調方法tellAnswer;
* 這樣一套流程,構成了一種雙向調用的關係。

解釋:java

  回調的作法是,調用方在調用時,將本身(this)傳遞給被調用方,這樣,當被調用方完成必定的邏輯後,能夠經過傳遞過來的this,回調調用方的方法。後端

 

Callback:回調接口ide

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:學生this

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:測試方法spa

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

 

參考:3d

https://www.cnblogs.com/aademeng/articles/11070081.html
相關文章
相關標籤/搜索