模塊之間總是存在這一定的接口昏兆,從調(diào)用方式上看,可以分為三類:同步調(diào)用、回調(diào)和異步調(diào)用
1.同步調(diào)用是一種阻塞式調(diào)用联予,也是我們?cè)趯懗绦蛑薪?jīng)常使用的
2.回調(diào)是一種雙向的調(diào)用模式瓣履,也就是說(shuō)率翅,被調(diào)用的接口被調(diào)用時(shí)也會(huì)調(diào)用對(duì)方的接口
3.異步調(diào)用是一種類似消息或事件的機(jī)制,解決了同步阻塞的問(wèn)題
舉例來(lái)講:A通知B后袖迎,他們各走各的路冕臭,互不影響,不用像同步調(diào)用那樣燕锥,A通知B后辜贵,非得等到B走完后,A才繼續(xù)走
同步和異步機(jī)制的出現(xiàn)不必多說(shuō)归形,大家心知肚明托慨,那回調(diào)機(jī)制為什么會(huì)出現(xiàn)呢?在我們現(xiàn)實(shí)生活中暇榴,有如下這樣場(chǎng)景:有一位老板很忙厚棵,他沒(méi)有時(shí)間盯著員工干活,然后他告訴自己的雇員蔼紧,干完當(dāng)前這些事情后婆硬,告訴他干活的結(jié)果。這個(gè)例子其實(shí)是一個(gè)回調(diào)+異步的例子奸例,再舉一個(gè)例子柿祈,A程序員寫了一段程序a,其中預(yù)留了回調(diào)函數(shù)接口哩至,并封裝好了該程序躏嚎,程序員B讓a調(diào)用自己的程序b中的一個(gè)方法,于是菩貌,他通過(guò)a中的接口回調(diào)自己b中的方法卢佣,到這里你可能似懂非懂了,后面會(huì)繼續(xù)說(shuō)明回調(diào)的出現(xiàn)原因箭阶。接下來(lái)我們把上面例子變成代碼虚茶,看到網(wǎng)上很多人最后搞混了異步和回調(diào)戈鲁,因此例子中不加入異步調(diào)用。(注意:回調(diào)可不是解決什么調(diào)用時(shí)間過(guò)長(zhǎng)問(wèn)題嘹叫,那是異步F诺睢)
首先創(chuàng)建一個(gè)接口:老板需要在員工干完活之后被通知到
public interface CallBackInterface {
public void solve(String str);
}
創(chuàng)建回調(diào)對(duì)象:老板,因?yàn)閱T工干完活后要電話老板告訴他活已經(jīng)干完
/**
* 老板是作為上層應(yīng)用身份出現(xiàn)的罩扇,下層應(yīng)用(員工)是不知道 有哪些方法婆芦,因此他想被下層應(yīng)用(員工)調(diào)用必須實(shí)現(xiàn)此接口
*/
public class Boss implements CallBackInterface{
private Employee employee;
public Boss(Employee employee) {
this.employee = employee;
}
//boss吩咐員工做事
public void tellToDo(String str){
System.out.println("boss吩咐員工"+str);
employee.doThing(this, str);
}
//員工做完之后,回調(diào)此方法告訴boss事情已近剛做完
@Override
public void solve(String str) {
System.out.println("員工做完之后,回調(diào)此方法告訴Boss");
}
}
創(chuàng)建控制對(duì)象:?jiǎn)T工,他必須持有老板的地址(回調(diào)接口)喂饥,即使老板換了一茬又一茬消约,辦公室不變,總能找到對(duì)應(yīng)的老板
public class Employee{
public void doThing(CallBackInterface callBackInterface,String str){
System.out.println("員工干活:"+str+"干完之后,通知Boss做好了");
callBackInterface.solve(str);
}
}
代碼測(cè)試
public class TestCallBack {
public static void main(String[] args) {
Employee employee = new Employee();
Boss boss = new Boss(employee);
boss.tellToDo("拖地");
}
}
執(zhí)行結(jié)果
boss吩咐員工拖地
員工干活:拖地干完之后,通知Boss做好了
員工做完之后,回調(diào)此方法告訴Boss