实现无侵入切换网络请求框架

一、项目开发中,往往会随着需求的改变或者项目的升级重构等而切换到其它网络加载框架上去。如果最初代码设计的耦合度太高,那么恭喜你,成功入坑了。至今无法忘却整个项目一行行去复制粘贴被支配的恐惧。

640?wx_fmt=png

那我们如何去搭建这样一个框架去在这个变化中最大程度的实现代码的可扩展性和变通性?

先说一下我们的设计思路或者说是设计原则:本着解耦和调用方便的原则 我们采用策略模式、单例模式和静态代理模式等来设计这个小巧精简易用的框架。


二、代码:

框架代码不多,

1、首先我们需要一个策略接口类,当然这里可以拓展你的其他方法,用于不同的网络请求策略去实现它执行自己的网络加载方法

640?wx_fmt=png

2、我们需要一个RequestOptions, 不跟任何网络框架有关,但又适用于所有的网络框架,负责传递网络请求的一些配置信息,如需别的方法自行添加即可

640?wx_fmt=png

public interface RequestBack<T> {
   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

640?wx_fmt=png

第二个策略
/**
* okhttp
的封装
*/
public class RequestOK implements IRequestStrategy {
   @Override
   
public void loadData(Context context, RequestOptions options,
                        RequestBack back) {

   }
}

如何使用呢?看下边 

  1、先初始化,设置要使用的网络请求策略

640?wx_fmt=png

2、调用请求

640?wx_fmt=png


如果你想切换网络请求策略调用

640?wx_fmt=png

切换即可!
不用更改任何逻辑代码!!!

总结:到这里 就结束了,怎么样?是不是很简单,同样的道理,你也可以封装下别的常用的需要
切换的框架,实现无侵入切换,动动手指开始写起来吧!有问题欢迎交流


                        喜欢 就关注吧,欢迎投稿!

640?wx_fmt=jpeg

本网站文章均为原创内容,并可随意转载,但请标明本文链接
如有任何疑问可在文章底部留言。为了防止恶意评论,本博客现已开启留言审核功能。但是博主会在后台第一时间看到您的留言,并会在第一时间对您的留言进行回复!欢迎交流!
本文链接: https://leetcode.jp/实现无侵入切换网络请求框架/

此条目发表在Android分类目录。将固定链接加入收藏夹。

发表评论

您的电子邮箱地址不会被公开。