博主应届生菜鸟一枚。
引用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里面主要就是做了细致的读写缓存操作,包括操作线程去处理缓存 ,这边就不给详细的代码了。。哈哈。
网友评论