Retrofit架构解析

252 阅读2分钟

Retrofit架构解析

Okhttp的缺陷

  • 问题一:用户网络请求接口配置繁琐,尤其是需要配置复杂的请求Body、请求头、参数的时候。
  • 问题二:数据解析过程需要用户手动拿到responsbody进行解析,不能复用。
  • 问题三:无法适配自动进行线程切换。
  • 问题四:一旦存在嵌套网络请求,就会陷入“回调陷阱”。

Retrofit是什么?

准确来说,Retrofit是一个RESTful的HTTP网络请求框架的封装。

**原因:**网络请求的工作本质还是由OKHTTP完成,而Retrofit只是负责网络请求接口的封装。

Retrofit设计的任务

tempimg-1302248544.cos.ap-chengdu.myqcloud.com/Img/PingMu/…

请求前:

  1. 统一的配置网络请求头:使用建造者模式、门面模式来对一些参数进行统一的配置,并且将其保存。

  2. 一致适配请求request:create()方法里面使用了动态代理模式,这样子就可以代理所有类对象。

请求后:

  1. 线程切换:

  2. 数据适配:

Retrofit封装的点

  1. Build 模式创建网络请求的基本配置。(解决了问题一)
  2. 用注解来排列组合合成网络请求,以不变应万变。(解决了问题一)
  3. 统一提供Gson解析,提供可复用,易拓展的数据解析方案。(解决了问题二)
  4. 自定义Executor(Handler)完成线程的切换。(解决了问题三)

Retrofit这个类就是保存一系列的参数给后面使用,使用的是Build模式

Retrofit设计模式

在构建Retrofit时,采用的是建造者模式、外观模式

在适配一致请求request时:Create()方法里面使用了动态代理模式

建造者模式:

外观模式:

静态代理模式:

  • 代理类和委托类有同样的接口。
  • 代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后的消息处理等。
  • 一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正的实现服务,而是通过调用委托类的对象的相关方法,来提供服务。

动态代理模式:

Create()方法会生成一个类的对象,即传进来的类的对象。

每次调用create方法时,将class传递进来,retrofit就会采用动态代理的方式,返回该类的对象。

Retrofit注解解析

Retrofit注解分类