博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现无侵入切换网络请求框架
阅读量:5873 次
发布时间:2019-06-19

本文共 1828 字,大约阅读时间需要 6 分钟。

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

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

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

二、代码:

框架代码不多,

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());切换即可!不用更改任何逻辑代码!!!复制代码
总结:到这里 就结束了,怎么样?是不是很简单,同样的道理,你也可以封装下别的常用的需要切换的框架,实现无侵入切换,动动手指开始写起来吧!有问题欢迎交流复制代码

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

转载地址:http://cvhnx.baihongyu.com/

你可能感兴趣的文章
Netty 4.1.35.Final 发布,经典开源 Java 网络服务框架
查看>>
详解Microsoft.AspNetCore.CookiePolicy
查看>>
SCDPM2012 R2实战一:基于SQL 2008 R2集群的SCDPM2012 R2的安装
查看>>
SQL SERVER中字段类型与C#数据类型的对应关系
查看>>
Linux lsof命令详解
查看>>
SVG path
查看>>
js判断checkbox是否选中
查看>>
多系统盘挂载
查看>>
MySQL函数怎么加锁_MYSQL 函数调用导致自动生成共享锁问题
查看>>
MR1和MR2的工作原理
查看>>
Eclipse中修改代码格式
查看>>
GRUB Legacy
查看>>
关于 error: LINK1123: failure during conversion to COFF: file invalid or corrupt 错误的解决方案...
查看>>
python实现链表
查看>>
java查找string1和string2是不是含有相同的字母种类和数量(string1是否是string2的重新组合)...
查看>>
Android TabActivity使用方法
查看>>
Eclipse的 window-->preferences里面没有Android选项
查看>>
《麦田里的守望者》--[美]杰罗姆·大卫·塞林格
查看>>
遇到的那些坑
查看>>
央行下属的上海资信网络金融征信系统(NFCS)签约机构数量突破800家
查看>>