网络框架替换?一行代码搞定

网络框架替换?一行代码搞定

在App版本迭代中,有可能会跟换框架,比如我们之前的网络框架是volley,后来替换为okhttp或者retrofit,或者图片加载框架从ImageLoader替换为Glide,那在我们如何在项目中使用一行代码来完成框架的替换?既节省了代码熟悉的时间,又能脱离业务直接开发,大大提高开发效率和降低代码之间的耦合度

思路:添加一个隔离层,App可以选择需要的框架,并提供相应的接口。App使用隔离层提供的接口即可。
网络框架替换?一行代码搞定_第1张图片
具体实现就是通过:动态代理
首先,我们可以把网络请求分工一下,app就是负责发起请求需求的,OKhttp负责真正的请求,以前我们都是直接将两者耦合到一起,现在不妨在两者之间加入一个隔离层,这样设想一下:我们把app当层客户,这个客户想买房,而okhttp是卖房的人。按照现有思想,我们可以在其中间添加一个房屋中介公司(链家)和一个销售(链家业务员)。(客户想买房,并不会直接找业主买房,而是通过房产公司。房产公司会有一些业务员,业务员会查看公司登记了哪些在卖的房子。而这些在卖的房子真正是属于这些业主的。房产公司具备卖房的能力,而真正进行卖房动作的是业务员,业务员会持有业主的一个引用,卖房的过程由业务员和业主进行交互。)
这样的话:App可以理解为客户;房产公司和业务员可以理解为隔离层;volley、okhttp、retrofit等框架可以理解为业主。

动态代理类图如下所示:

下面开始动手code
(1)创建一个demo,并添加依赖
网络框架替换?一行代码搞定_第2张图片
(2)新建IHttpProcessor接口,相当于房产公司,里面可以定义各种网络操作的方法,如post、get等。 如下图:
网络框架替换?一行代码搞定_第3张图片
其中ICallBack为回调接口,里面包含两个方法:成功、失败
网络框架替换?一行代码搞定_第4张图片
ICallback中的onSuccess返回的是String类型,如果想直接返回一个json转换后的对象,我可以定义一个HttpCallback实现ICallback接口,然后将json字符串转换为我们需要的对象。 如图:
网络框架替换?一行代码搞定_第5张图片
(3)添加代理类(业务员),因为客户要买房去房产公司,一般都有业务员接待,所以按照现实社会逻辑,我们添加一个业务员类,使其与客户和业主关联起来
网络框架替换?一行代码搞定_第6张图片
(4)接下来就是重头戏了,我们的业主闪亮登场,比如OkHttp/Volley/Xutils等,由于网络请求框架大同小异,这里就只累述一个okhttp,其它逻辑大同小异,都是创建完网络请求后,在成功和失败函数里回调callback的对应函数即可
网络框架替换?一行代码搞定_第7张图片
(5)然后就是让app(客户)发起网络请求的需求,并且在application初始化对应的网络框架
网络框架替换?一行代码搞定_第8张图片
网络框架替换?一行代码搞定_第9张图片
当我们想切换网络请求框架的时候直接在application切换即可,极大的提高了开发效率

(思考Tips:虽然这样会提高开发效率,但也暴露出一些问题,比如对象的生命周期不好管理,和在application初始化对启动速度的影响也需要考虑,那么有没有更好的办法来解决这些问题,敬请期待续集…)

你可能感兴趣的:(安卓,Android,android,android,studio)