首页投稿(暂停使用,暂停投稿)程序员Android技术知识

建造者模式实战--Retrofit二次封装(二)

2016-07-21  本文已影响1203人  贰yang

前言

需求是常变得,在实践中往往会发现自己开发的库会有这样或者那样的不足,然而,碰到网络请求这样的库,会在最少几十个位置调用,我们肯定不想改完请求库的,还要去改已经调用了的地方全改一遍,这就失去我们二次封装的本意了。

要做到不用再去改已经调用的地方,需要注意几个方面呢?
1.类名、类的所在位置不能删改。
2.方法名,方法传参,方法返回类型 不能删改。
3.public 的成员变量名字和类型不能删改。
4.修饰符作用域不能变小,比如public 改成private 是不行的。
5.类不可改成接口,接口可改成类

怎么做到呢?很简单,使用java的方法重载来解决?今天我就给大家实例演示怎么根据需求添加代码的。

需求

在使用自己封装的 网络请求库 时,发现还是有很多不足的,所以给自己定了几个需要修改的方向。

1.有些请求并不需要设置缓存 所以 改为 想要得到缓存时,才实现onCache()方法
2.有时候,当请求异常时,才取出缓存显示,此时,希望在onFailure()方法中,也返回缓存数据
3.希望返回的结果可以是已经解析完成的实体类
4.加入文件上传功能

具体做法

1.让onCache() 和 onFailure()方法 在自己需要时才实现

这个很好解决,把接口改成抽象类,即可 看图说话;

1.png

2.再请求出现异常时,在onFailure()方法中,返回缓存数据

解决办法:使用方法重载就可以了,OnResultListener 的修改看第一张图,然后再 handlerError();调用方法即可,如下图


2.png

3.放回的结果是已经解析完成的实体类

因为json 有JsonObject 和 JSONArray 两种(Retrofit2.0官方默认的只有JSONObject 一种,如果返回数据是JSONArray 则会报错) 所以我在Builder类添加新的参数,用来判断返回json的格式类型。而解析json数据,我采用的是国内号称解析jison数据最快的fastJson来实现


3.png

在此处,buider的优点就被发挥出来了,当我们要扩展功能的时候,post方法和get方法都没有发生变化,不会影响到历史调用。而又扩展了自己需要的功能。相当给力。

4.修改后的使用

4.png

结语:当然还可以在builder类添加一个方法,扩展一个显示默认的WaitDialog的功能,只要注意文章开头提到的五大要求。

项目地址:点此查看

上一篇 下一篇

猜你喜欢

热点阅读