Java回調機制分析

    在安卓學習過程中經常聽到回調函數,也經常用到回調函數,但只是有這個概念,並不清楚具體回調函數的運行機制。網上看了許多博客,大都採用代碼分析。這裏我們採用代碼結合圖例進行分析講解。

     先來看下回調的含義。就是A類中調用B類中的某個方法C,然後B類中反過來調用A類中的方法D,D這個方法就叫回調方法。反正這說法我也看的模糊。

    那我們在來看個通俗點的說法。有一天老王遇到一個很難的問題,問題是“1 + 1 = ?”,就打電話問小李,小李一下子也不知道,就跟老王說,等我辦完手上的事情,就去想想答案,老王也不會傻傻的拿着電話去等小李的答案吧,於是老王就對小李說,我還要去逛街,你知道了答案就打我電話告訴我,於是掛了電話,自己辦自己的事情,過了一個小時,小李打了老王的電話,告訴他答案是2。
這個例子很形象的說明了回調的作用。那麼我們結合代碼來分析下回調的過程。

    我們先定義個接口。用於回調,用於答覆問題。

public interface callback {
    public void reply(String str);
}
    老王要問小李個問題。

public class Wang implements callback{

    //老王要和小李聯繫,持有小李的對象.
    private Li li;

    public Wang(Li li) {
        this.li = li;
    }

    public void askQuestion(final String question){
        new Thread(){
            @Override
            public void run() {
                //註冊回調接口(老王講自身的接口和問題傳入,等待答覆)
                li.executeMessage(Wang.this, question); 
            }
        }.start();
    }

    @Override
    public void reply(String str) {
        //等待回覆的結果.小李會利用這個方法來回復
        System.out.println(str);
    }

}
    小李利用接口回調回答老王問題。
public class Li {

    public void executeMessage(callback call,String  question){
        System.out.println(question);
        //根據老王傳入的接口,調用老王的reply方法對老王的問題進行回覆。
        call.reply("小李:老王你個逗逼1+1=2");
    }
}
    測試方法

public class Main {
    public static void main(String[] args) {
        Li li = new Li();
        Wang w = new Wang(li);
        w.askQuestion("老王:小李我問你個問題:1+1=?");
    }
}
    測試結果
老王:小李我問你個問題:1+1=?
小李:老王你個逗逼1+1=2

看完代碼相信你應該已經明白了大半,如果還不明白我們在結合圖例來進行分析一下。
這裏寫圖片描述
看完這個圖片相信你應該能明白這個整個的流程,老王和小李其實是藉助這個接口進行通訊。
這篇文章參考了xiaanming的博客,對其進行了簡化以方便初學者理解回調機制的流程。(http://blog.csdn.net/xiaanming/article/details/17483273

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