Retrofit架构解析
Okhttp的缺陷
- 问题一:用户网络请求接口配置繁琐,尤其是需要配置复杂的请求Body、请求头、参数的时候。
- 问题二:数据解析过程需要用户手动拿到responsbody进行解析,不能复用。
- 问题三:无法适配自动进行线程切换。
- 问题四:一旦存在嵌套网络请求,就会陷入“回调陷阱”。
Retrofit是什么?
准确来说,Retrofit是一个RESTful的HTTP网络请求框架的封装。
**原因:**网络请求的工作本质还是由OKHTTP完成,而Retrofit只是负责网络请求接口的封装。
Retrofit设计的任务
tempimg-1302248544.cos.ap-chengdu.myqcloud.com/Img/PingMu/…
请求前:
统一的配置网络请求头:使用建造者模式、门面模式来对一些参数进行统一的配置,并且将其保存。
一致适配请求request:create()方法里面使用了动态代理模式,这样子就可以代理所有类对象。
请求后:
线程切换:
数据适配:
Retrofit封装的点
- Build 模式创建网络请求的基本配置。(解决了问题一)
- 用注解来排列组合合成网络请求,以不变应万变。(解决了问题一)
- 统一提供Gson解析,提供可复用,易拓展的数据解析方案。(解决了问题二)
- 自定义Executor(Handler)完成线程的切换。(解决了问题三)
Retrofit这个类就是保存一系列的参数给后面使用,使用的是Build模式
Retrofit设计模式
在构建Retrofit时,采用的是建造者模式、外观模式
在适配一致请求request时:Create()方法里面使用了动态代理模式
建造者模式:
外观模式:
静态代理模式:
- 代理类和委托类有同样的接口。
- 代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后的消息处理等。
- 一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正的实现服务,而是通过调用委托类的对象的相关方法,来提供服务。
动态代理模式:
Create()方法会生成一个类的对象,即传进来的类的对象。
每次调用create方法时,将class传递进来,retrofit就会采用动态代理的方式,返回该类的对象。