詳解Java回調機制 (Callback) --講解+實例

Java中的回調(callback)是很重要的一個概念,spring整合hibernate大量使用了這種技術。
究竟怎樣纔是回調呢?
這是網上最多見到的說明:   
  1.class   A,class   B   
  2.class   A實現接口callback
  3.class   B擁有一個參數爲callback接口類型的函數
  4.class   A運行時調用class   B中的函數,以自身傳入參數   
  5.class   B已取得A,就可以隨時回調A所實現的callback接口中的方法   

下面我舉一個例子:
中國電信(ChinaTelecom)是移動運營商之一,想必近兩年滿天飛的“天翼3G”大家都知道吧。空中網(KongNet)是那個總是喊“用手機看NBA”的服務提供商(ServiceProvider,簡稱“SP”)。
移動運營商和SP合作才能爲我們廣大移動用戶提供各種服務。比如音樂,彩鈴,手機看NBA等等。
這裏有一個接口ServiceProvider,也就是Callback接口;

/**
 * 與中國電信合作的sp實現此接口即可
 * 這個就是Callback接口
 * @author wanghe
 *
 */
public interface ServiceProvider {
    /**
     * sp可以自定義提示
     */
    public void customHint();
}

一個ChinaTelecom類,即class B;

/**
 * 中國電信
 * @author wanghe
 *
 */
public class ChinaTelecom {
    private ServiceProvider sp;//callback接口作爲屬性

    public void setSp(ServiceProvider sp) {
        this.sp = sp;
    }
    
    /**
     * 初始化
     */
    public void init(){
        System.out.println("Welcome, This is ChinaTelecom! ");
        sp.customHint();//sp自定義的操作
    }
}

一個KongNet類,即 class   A

/**
 * 服務提供商(SP)--空中網 
 * @author wanghe
 *
 */
public class KongNet implements ServiceProvider{

    public void customHint() {
        System.out.println("優惠活動開始啦,即日起登陸空中網就有好禮送! 詳情見網站公告。");
    }

    public void init(){
        ChinaTelecom ct=new ChinaTelecom();
        ct.setSp(new KongNet());//告訴ChinaTelecom這是哪家sp
        ct.init();
    }
    
    public static void main(String[] args){
        KongNet sp = new KongNet();
        sp.init();
    }
}

在你的Eclipse裏面試一下吧,將可以看到
Welcome, This is ChinaTelecom! 
優惠活動開始啦,即日起登陸空中網就有好禮送! 詳情見網站公告。
這樣的輸出。

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