轉載自:http://blog.csdn.net/fengyifei11228/article/details/5729445
所謂回調,就是客戶程序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都用到回調機制,可以訪問遠程服務器程序。
其實就是通過別人的函數達到調用自己函數的目的,c/c++是通過函數指針來實現的,而java是通過接口來實現的,其實也是利用了多態的性質。
假設我是程序員A,以下是我的程序a:
- public class Caller
- {
- public MyCallInterface mc;
- public void setCallfuc(MyCallInterface mc)
- {
- this.mc= mc;
- }
- public void call(){
- this.mc.method();
- }
- }
我還需要定義一個接口,以便程序員B根據我的定義編寫程序實現接口。
- public interface MyCallInterface
- {
- public void method();
- }
於是,程序員B只需要實現這個接口就能達到回調的目的了:
- public class B implements MyCallInterface
- {
- public void method()
- {
- System.out.println("回調");
- }
- public static void main(String args[])
- {
- Caller call = new Caller();
- call.setCallfuc(new B());
- call.call();
- }
- }