標籤:
在電腦程式設計中,回呼函數,或簡稱回調,是指通過函數參數傳遞到其它代碼的,某一塊可執行代碼的引用。這一設計允許了底層代碼調用在高層定義的子程式。
下面先寫一個小例子來瞭解回調。
1 類圖:
Boss類實現介面MyCallInterface,Worker中的setCallBack方法註冊回調對象。
2 建立一個回調介面,讓老闆告知幹完活如何找到他的方式:留下老闆辦公室地址:
<span style="font-family:KaiTi_GB2312;font-size:18px;">package com.tgb.callback;/** * 此介面為聯絡的方式,不論是電話號碼還是聯絡地址,作為 * 老闆都必須要實現此介面 * @author yingjie* */public interface MyCallInterface { public void printName(); }</span>
3 建立回調對象,就是老闆本身,為了讓員工工作完成之後告訴老闆
<span style="font-family:KaiTi_GB2312;font-size:18px;">package com.tgb.callback;/** * 老闆是作為上層應用身份出現的,下層應用(員工)是不知道 * 有哪些方法,因此他想被下層應用(員工)調用必須實現此介面 * @author yingjie * */ public class Boss implements MyCallInterface{@Overridepublic void printName() {System.out.println("This is the Boss printName method"); }}</span>
4 建立控制類,也就是員工對象,他必須持有老闆的地址(回調介面)
<span style="font-family:KaiTi_GB2312;font-size:18px;">package com.tgb.callback;public class Worker {private MyCallInterface callInterface; public Worker() { } //告訴老闆的連絡方式,也就是註冊 public void setCallBack(MyCallInterface callInterface) { this.callInterface = callInterface; } public void callBoss() { callInterface.printName(); } }</span>
5 用戶端調用
<span style="font-family:KaiTi_GB2312;font-size:18px;">package com.tgb.callback;public class Client { public static void main(String[] args) { Worker worker = new Worker(); worker.setCallBack(new Boss()); worker.callBoss(); //告訴老闆幹完了 } } </span>
6 為什麼使用回調方法?
正常情況下開發人員使用已經定義好的API,這個過程叫調用。但是有時這樣不能滿足需求,就需要程式員註冊自己的程式,然後讓事先定義好多API在合適的時候調用註冊的方法,這叫回調。
回調用於層間協作,上層將本層函數安裝在下層,這個函數就是回調,而下層在一定條件下觸發回調,例如作為一個驅動,是一個底層,他在收到一個資料時,除了完成本層的處理工作外,還將進行回調,將這個資料交給上層應用程式層來做進一步處理,這在分層的資料通訊中很普遍。
其實回調和API非常接近,他們的共性都是跨層調用的函數。但區別是API是低層提供給高層的調用,一般這個函數對高層都是已知的;而回調正好相反,他是高層提供給底層的調用,對於低層他是未知的,必須由高層進行安裝,這個安裝函數其實就是一個低層提供的API,安裝後低層不知道這個回調的名字,但它通過一個函數指標來儲存這個回調,在需要調用時,只需引用這個函數指標和相關的參數指標。
7 總結
java中的回調就是獲得另一個對象的引用,然後調用對象中的方法。
java--回調方法