Callback機(jī)制

模塊之間總是存在這一定的接口昏兆,從調(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ù)走

Paste_Image.png

同步和異步機(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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末员帮,一起剝皮案震驚了整個(gè)濱河市或粮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌捞高,老刑警劉巖氯材,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異硝岗,居然都是意外死亡氢哮,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門辈讶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)命浴,“玉大人娄猫,你說(shuō)我怎么就攤上這事贱除。” “怎么了媳溺?”我有些...
    開(kāi)封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵月幌,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我悬蔽,道長(zhǎng)扯躺,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任蝎困,我火速辦了婚禮录语,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘禾乘。我一直安慰自己澎埠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布始藕。 她就那樣靜靜地躺著蒲稳,像睡著了一般氮趋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上江耀,一...
    開(kāi)封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天剩胁,我揣著相機(jī)與錄音,去河邊找鬼祥国。 笑死昵观,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的系宫。 我是一名探鬼主播索昂,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼扩借!你這毒婦竟也來(lái)了椒惨?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤潮罪,失蹤者是張志新(化名)和其女友劉穎康谆,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體嫉到,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沃暗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了何恶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片孽锥。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖细层,靈堂內(nèi)的尸體忽然破棺而出惜辑,到底是詐尸還是另有隱情,我是刑警寧澤疫赎,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布盛撑,位于F島的核電站,受9級(jí)特大地震影響捧搞,放射性物質(zhì)發(fā)生泄漏抵卫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一胎撇、第九天 我趴在偏房一處隱蔽的房頂上張望介粘。 院中可真熱鬧,春花似錦晚树、人聲如沸姻采。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)偎谁。三九已至总滩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間巡雨,已是汗流浹背闰渔。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铐望,地道東北人冈涧。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像正蛙,于是被迫代替她去往敵國(guó)和親督弓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理乒验,服務(wù)發(fā)現(xiàn)愚隧,斷路器,智...
    卡卡羅2017閱讀 134,651評(píng)論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法锻全,類相關(guān)的語(yǔ)法狂塘,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法鳄厌,異常的語(yǔ)法荞胡,線程的語(yǔ)...
    子非魚_t_閱讀 31,623評(píng)論 18 399
  • 點(diǎn)擊查看原文 Web SDK 開(kāi)發(fā)手冊(cè) SDK 概述 網(wǎng)易云信 SDK 為 Web 應(yīng)用提供一個(gè)完善的 IM 系統(tǒng)...
    layjoy閱讀 13,758評(píng)論 0 15
  • 聚散 私人日志 2011-03-03 17:24:05| 分類: 默認(rèn)分類 字號(hào) 下載LOFTER我的照片書...
    漁夫一七閱讀 172評(píng)論 0 0
  • 與網(wǎng)站目標(biāo)關(guān)鍵詞相對(duì)應(yīng)泪漂,能帶來(lái)流量的關(guān)鍵詞叫長(zhǎng)尾關(guān)鍵詞。長(zhǎng)尾關(guān)鍵詞帶來(lái)的客戶歪泳,轉(zhuǎn)化為網(wǎng)站產(chǎn)品客戶的概率比目...
    小豆233閱讀 676評(píng)論 0 1