一、项目开发中,往往会随着需求的改变或者项目的升级重构等而切换到其它网络加载框架上去。如果最初代码设计的耦合度太高,那么恭喜你,成功入坑了。至今无法忘却整个项目一行行去复制粘贴被支配的恐惧。
那我们如何去搭建这样一个框架去在这个变化中最大程度的实现代码的可扩展性和变通性?
先说一下我们的设计思路或者说是设计原则:本着解耦和调用方便的原则 我们采用策略模式、单例模式和静态代理模式等来设计这个小巧精简易用的框架。
二、代码:
框架代码不多,
1、首先我们需要一个策略接口类,当然这里可以拓展你的其他方法,用于不同的网络请求策略去实现它执行自己的网络加载方法
2、我们需要一个RequestOptions, 不跟任何网络框架有关,但又适用于所有的网络框架,负责传递网络请求的一些配置信息,如需别的方法自行添加即可
public interface RequestBack{ void onFail(Object obj); void onSuccess(T obj);}复制代码
3、最重要的最后一步就是网络请求的管理调用,策略或者静态代理模式,开发者只需要关心RequestManager + RequestOptions
代码如下:
复制代码
public class RequestManager {
private static IRequestStrategy sRequest;private static volatile RequestManager sInstance;private RequestManager() {
}//单例模式
public static RequestManager getInstance() { if (sInstance == null) { synchronized (RequestManager.class) { if (sInstance == null) { //若切换其它加载框架,可以实现一键替换sInstance = new RequestManager();}}}return sInstance;}//提供实时替换网络加载框架的接口
public void setRequestLoader(IRequestStrategy loader) { if (loader != null) { sRequest = loader;}}public RequestOptions url(String path) {
return new RequestOptions(path);}public void loadOptions(Context context,RequestOptions options,
RequestBack back) { sRequest.loadData(context,options,back);}}
复制代码
怎么样 是不是很简单,那我们看一下怎么使用吧
三、使用
写一个当前使用的网络请求框架的请求策略,去实现IRequestStrategy
第二个策略/** * okhttp的封装 */public class RequestOK implements IRequestStrategy { @Override public void loadData(Context context, RequestOptions options, RequestBack back) { }}复制代码
如何使用呢?看下边
1、先初始化,设置要使用的网络请求策略
RequestManager.getInstance().setRequestLoader(new RequestOK());2、调用请求复制代码
复制代码
如果你想切换网络请求策略调用复制代码
RequestManager.getInstance().setRequestLoader(new RequestOK());切换即可!不用更改任何逻辑代码!!!复制代码
总结:到这里 就结束了,怎么样?是不是很简单,同样的道理,你也可以封装下别的常用的需要切换的框架,实现无侵入切换,动动手指开始写起来吧!有问题欢迎交流复制代码
喜欢 就关注吧,欢迎投稿!