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

作者: 贰yang | 来源:发表于2016-07-21 20:00 被阅读1203次

    前言

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

    要做到不用再去改已经调用的地方,需要注意几个方面呢?
    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的功能,只要注意文章开头提到的五大要求。

    项目地址:点此查看

    相关文章

      网友评论

        本文标题:建造者模式实战--Retrofit二次封装(二)

        本文链接:https://www.haomeiwen.com/subject/pirfjttx.html