美文网首页Android技术知识
从OKHttp看单一职责

从OKHttp看单一职责

作者: b496178cdc84 | 来源:发表于2016-08-20 09:46 被阅读53次

    博主应届生菜鸟一枚。

    引用Android源码设计模式 单一职责定义:“就一个类而言,应该仅有一个引起它变化的原因。简单来说,一个类就是一组相关性很高的函数、数据的封装。” 下面通过一个大家都很熟悉例子来说明一下 自己的理解。涉及到三个类 ,</br>OkHttpEngine类 负责网络请求。
    ,HttpCallback 类负责网络请求后的进行的操作
    ,CacheManager。专门负责读写缓存

    代码已经被公司大牛封装好了。我最近再重构的时候,就拿过来使用,顺便学习了一下。下面直接看简略代码

    先来看OkHttpEngine类

    /**
    *
    **/
    public class OkHttpEngine{
    private Builder mBuilder;
    public static final int MODE_GET = 0;//get请求
    public static final int MODE_POST = 1;//post请求
    
    private OkHttpEngine(Builder builder) {
              mBuilder = builder;
    }
    
    public<T> void excute(HttpCallback<T> callback){
      switch(mBuilder.mode){
      case get:
      doget(callback);
     break;
    
     case post:
      dopost(callback);
     break;
    }
    private<T> void get(HttpCallback<T> callback){
    //这里面拿到参数
    String requestUrl = HttpUtils.createUrl(mBulider.params);
    //GET 请求
    //这里进行get请求的时候可以设置是否从缓存中读取
    if(loadCache){
    //这里就简写了 还要判断一下缓存是否存在
    CacheManager.getInstace().loadCache
    
    
    /**
    这里用鸿神的OkHttpUtil 去请求网络
    OkhttpUtils.get()
                    .url().
                    ......
                    .excute(callback);
    **/
    }
    }
    
    private<T> void post(HttpCallback<T> callback){
    //Post请求
    和get请求的逻辑差不多
    }
    
    public static class Builder{
    int mode =  ....
    String url ;
    String tag;
    
    public Builder url(String url){
    this.url = url;
    }
    
    .........
    
    
    }
    
    }
    }
    

    可以看出这个类仅仅就是做了请求网络,网络请求就是他的职责

    再看HttpCallBack,

    
    public abstract class HttpCallback<T> extends StringCallback{
    
    @Override
    public void onResponse(String s, int i) { 
    try {        
     T result = parseResponse(s);       
     postResult(result);
     }
    catch (Exception e) {    
     e.printStackTrace();    
     postError(e);   
     }
    }
    
    private void postResult(){
    onsuccess();
    //是否写入缓存
    if(cache){
    CacheManager.getInstance().writeCache(object);
    }
    
    
    }
    
    public abstrack void onSuccess();
    
    }
    

    这里面就给出了简略的代码。可以看出 这个类的职责就是做回调后的操作例如 是否写入缓存

    CacheManager里面主要就是做了细致的读写缓存操作,包括操作线程去处理缓存 ,这边就不给详细的代码了。。哈哈。

    相关文章

      网友评论

        本文标题:从OKHttp看单一职责

        本文链接:https://www.haomeiwen.com/subject/vonbsttx.html