前言
這裏展示回調從無到有的過程,看完就能明白爲什麼會有回調的存在。
(一)A正常工作
(1)Main類
public class Main {
public static void main(String []args){
A a = new A();
a.Work();
}
}
(2)A類
public class A {
public void Work(){
System.out.println("A類在工作...");
}
}
(3)執行結果
(2)A遇到了麻煩
(1)原本A在正常工作,然而現在遇到了點麻煩,但是A工作沒完成,走不開。此時委託B幫忙跑腿處理下。
(2)B類
public class B {
public void Work(){
System.out.println("B正在幫忙處理...");
}
}
(3)修改A類,請求B類幫忙
public class A {
public void Work(){
System.out.println("A類在工作...");
System.out.println("此時需要B類幫忙處理其他事情...");
//開啓線程讓B幫忙
new Thread(new Runnable() {
@Override
public void run() {
B b = new B();
b.Work();
}
}).start();
System.out.println("已經通知B幫忙了...A又繼續工作");
}
}
(4)執行結果
(三)A想知道B把事情處理完了沒有
(1)現在的情況是,A委託B幫忙處理事情,B也確實是去處理了,可是B走後就了無音訊了。事情處沒處理完A也不知情。所以A希望當B把事情處理完畢後能通知下A,此時就用到了回調。
(2)添加回調接口
public interface CallBack {
public void callBack(String rs);
}
(3)修改A類
public class A implements CallBack{
public void Work(){
System.out.println("A在工作...");
System.out.println("此時需要B幫忙處理其他事情...");
//開啓線程讓B幫忙
new Thread(new Runnable() {
@Override
public void run() {
B b = new B(new A());
b.Work();
}
}).start();
System.out.println("已經通知B幫忙了...A又繼續工作");
System.out.println("此時A想知道委託B的事情處理完沒有...");
}
@Override
public void callBack(String rs) {
System.out.println(rs);
}
}
(4)修改B類
public class B {
private A a;
public B(A a) {
this.a = a;
}
public void Work(){
System.out.println("B正在幫忙處理...");
a.callBack("B通知A:已經處理完你的事情了");
}
}
總結
看到有句話講的很精闢。
回調要求的是任務完成後,被調用者主動回調調用者的接口。