Java的多态

    需求:

            楼主前几天解决一个问题,大致给描述一下。我需要同时去使用url和sdk请求数据,优先使用url结果,有超时限制,超时后使用sdk结果。搞清楚了需求,再去看问题,因为之前早早就把sdk和url的model层代码写好了,等于是要在control层做一下逻辑处理,不能做太大的代码改动,两个结果都是异步返回

    解决方案:

            1 :同时发起url和sdk结果检索 ,发起检索的时候同时设置一个TimerTask 

            2 :让TimerTask同时去实现url和sdk的监听器,并在TimerTask的构造函数里面传入最终结果的回调监听器。

            3:所有的逻辑就可以很简单的在Task的回调方法中实现了

 

    我有三个监听器,分别是:

    1:结果搜索管返回监听器

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

    2:sdk结果返回监听器

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

    3:url结果返回监听器,

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

转载于:https://my.oschina.net/u/2278066/blog/689141

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值