前言
这里展示回调从无到有的过程,看完就能明白为什么会有回调的存在。
(一)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:已经处理完你的事情了");
}
}
总结
看到有句话讲的很精辟。
回调要求的是任务完成后,被调用者主动回调调用者的接口。