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中的多态,多实现的特性。用好了,会让咱们的程序变得很是的优美,而且高性能。

相关文章
相关标签/搜索