java函數回調

    轉載自: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:

[java] view plain copy
 print?
  1. public class Caller  
  2. {  
  3.     public MyCallInterface mc;  
  4.   
  5.     public void setCallfuc(MyCallInterface mc)  
  6.     {  
  7.        this.mc= mc;  
  8.     }  
  9.   
  10.     public void call(){  
  11.        this.mc.method();  
  12.     }  
  13. }      

  我還需要定義一個接口,以便程序員B根據我的定義編寫程序實現接口。

[java] view plain copy
 print?
  1. public interface MyCallInterface  
  2. {  
  3.     public void method();  
  4.   
  5. }  

     於是,程序員B只需要實現這個接口就能達到回調的目的了:

[java] view plain copy
 print?
  1. public class B implements MyCallInterface  
  2. {  
  3.     public void method()  
  4.     {  
  5.        System.out.println("回調");  
  6.     }  
  7.   
  8.     public static void main(String args[])  
  9.     {  
  10.        Caller call = new Caller();  
  11.        call.setCallfuc(new B());  
  12.        call.call();  
  13.     }  
  14. }  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章