所謂回調,就是客戶程序C調用服務程序S中的某個函數A,然後S又在某個時候反過來調用C中的某個函數B,對於C來說,這個B便叫做回調函數。例如Win32下的窗口過程函數就是一個典型的回調函數。一般說來,C不會自己調用B,C提供B的目的就是讓S來調用它,而且是C不得不提供。由於S並不知道C提供的B姓甚名誰,所以S會約定B的接口規范(函數原型),然後由C提前通過S的一個函數R告訴S自己將要使用B函數,這個過程稱為回調函數的注冊,R稱為注冊函數。Web Service以及Java的RMI都用到回調機制,可以訪問遠程服務器程序。(這段是網上抄的,摘自http://hi.baidu.com/f117_n/blog/item/2f52e612347cd3c8c3fd78ad.Html)
重新舉個例子來理解回調:
我遇到了一個問題,便用家裡的固話打給我的同事,他說不太清楚,稍後給我回復。我說我一會要出去,你想到了之後打我手機吧。沒過多久,我同事就打手機過來告訴了我答案。
下面是代碼:
1、先定義一個接口,規定回答問題的條件是打我手機
- public interface CallBack {
- //通過手機回答
- void CallIphone();
- }
2、調用者(我):
- public class Me {
- public void askQuestion(){
- System.out.println("撥打固話問1+1=?");
- }
- }
3、被調用者(同事):
- public class You {
- public void answer(CallBack callBack){
- //進行回調
- callBack.CallIphone();
- }
- public static void main(String[] args) throws InterruptedException {
- new Me().askQuestion();
- Thread.sleep(3000);
- new You().answer(new CallBack() {
- //實現接口,即回答問題的方式
- public void CallIphone() {
- System.out.println("撥打手機回答等於2");
- }
- });
- }
- }
4、顯示結果
撥打固話問1+1=?
撥打手機回答等於2
代碼很簡單,理解也很膚淺,希望對大家有用