retrofit诞生背景
在Android上面,进行网络请求的库HttpClient、HttpURLConnection、OKHttp和Volley有这些,不管使用哪个库来进行网络请求,都需要一些重复,繁琐的步骤:
1.组装各种请求参数,请求url等信息
2.使用网络库把请求发送至服务器,接收服务器的返回数据
3.对服务器返回的数据进行解析(不管是使用Gson还是其他的第三方解析库)
retrofit主要就是解决1,3步骤的
retrofit使用到知识点
运行时注解(注解分为编译时和运行时两种)
动态代理(那自然有静态代理,自己手动写代码来实现)
Builder(构建模式)
Facade(门面模式)
装饰模式
组合优于继承
面向接口编程
类结构
未命名文件.jpg-
Retrofit 是很关键的类,该类使用了facade,builder模式,开发者使用它来使用retrofit的功能,create(class)方法用来生成一个service的实例,里面用到了动态代理
-
ServiceMethod,收集方法,方法参数的注解信息,返回返回类型信息等信息。把参数值与注解信息最终融合在Request中
-
Call ,接口封装了从发送网络请求到返回数据的整个过程
-
OkHttpCall,实现了Call接口,该类主要把构造Request请求的过程通过ServiceMethod实现,在把Request通过OkHttpClient发送出去,通过Converter把返回数据转换为对应的类型,并且在各个环节增加了是否用户取消了网络请求处理
-
Converter,接口主要定义转换数据接口
-
CallAdapter,主要作用对返回的数据进行处理时,可以进行扩展,比如返回数据的回调在ui线程中执行
-
ExecutorCallAdapterFactory,实现了CallAdapter.Factory,实现了回调在ui线程中执行,当然开发者可以进行扩展
注解类
retrofit中注解类是很关键的比如Get,Post等
从中学到
- 简易性,别暴漏过多细节:自己在开发模块或者lib时,要让使用者使用起来能多傻瓜式那就多傻瓜式,尽量不要让使用者知道lib中过多的细节(类)的存在,retrofit中用户不需要关心的类都采用了缺省权限。
- 扩展性:使用者可以对lib或模块很容易的扩展功能(使用组合优于继承,面向接口编程)
网友评论