Java的多態

    需求:json

            樓主前幾天解決一個問題,大體給描述一下。我須要同時去使用url和sdk請求數據,優先使用url結果,有超時限制,超時後使用sdk結果。搞清楚了需求,再去看問題,由於以前早早就把sdk和url的model層代碼寫好了,等因而要在control層作一下邏輯處理,不能作太大的代碼改動,兩個結果都是異步返回異步

    解決方案:ide

            1 :同時發起url和sdk結果檢索 ,發起檢索的時候同時設置一個TimerTask 函數

            2 :讓TimerTask同時去實現url和sdk的監聽器,並在TimerTask的構造函數裏面傳入最終結果的回調監聽器。性能

            3:全部的邏輯就能夠很簡單的在Task的回調方法中實現了this

 

    我有三個監聽器,分別是:url

    1:結果搜索管返回監聽器qt

public interface MapListenner {
    void mapSearched(JSONObject object);
}

    2:sdk結果返回監聽器class

public interface SDKSearchedListenner {
    void onSDKSearched(JSONObject json);
}

    3:url結果返回監聽器,object

public interface URLSearchedListenner {
     void onURLSearched(JSONObject json);
}

 

        再看看個人Task實現類,我這裏寫的是一個內部類

/**
 * 請求檢索調度執行的task
 */
static  class QueryTask extends TimerTask  implements URLSearchedListenner , SDKSearchedListenner {

    MapListenner mpListenner ;
    JSONObject sdkResult = new JSONObject();

    public QueryTask(MapListenner mpl) {
        mpListenner = mpl;
    }

    @Override
    public void run() {
        this.cancel();
        mpListenner.mapSearched(sdkResult);
    }

    @Override
    public void onURLSearched(JSONObject json) {
        this.cancel();
        mpListenner.mapSearched(json);
    }

    @Override
    public void onSDKSearched(JSONObject json) {
        sdkResult = json ;
    }
}

 

有了這樣的一個多態的類,我就很輕鬆的可以在外部去調用了,在外部同時發起sdk和url檢索的時候,同時發起這樣的多態的監聽器,剩下的就不用管了~

    QueryTask qt = new QueryTask(listenner);
      mTimer.schedule(qt, TIME);

 

 

總結:必定要善用Java中的多態,多實現的特性。用好了,會讓咱們的程序變得很是的優美,而且高性能。

相關文章
相關標籤/搜索