retrofit流程
用建造者模式初始化,通过注解处理请求参数;工厂方法创建okhttp(实际没用工厂);工厂方法创建适配器来处理retrofit和okhttp的转换(rxjava也在这里添加,用于转observerble);converterfactories来处理请求参数和返回参数的转换(在servermethod里面调用的)
- 实例:
- 请求参数
- callFactory: 默认支持okhttp
- callbackExcutor: 一个主线程handler 用来切换线程
- adapterFactories: 用来做retrofit和okhttp之间的转换;比如添加rxjava把返回处理成observerble
- converterfactories:类型转换器,一般情况下用的Gson
retrofit = new Retrofit.Builder()
.baseUrl("http://www.xx.xx")
.addConverterFactory(GsonConverterFactory.create(new Gson())
.build();
- 创建一个接口类对象处理请求参数,在retrofit的create函数里面动态代理 创建接口对象 ,对象调用的时候 就实现了参数配置的归一化。
IxxService xxService = retrofit.create(IxxService.class);
Call<xxBean> xxCall = xxService.getxxx();
3.通过几轮的Call的转换+线程切换
client:enqueue-->ExecutorCallbackCall:enqueue-->OKhttpCall:enqueue-onResponse-parseResponse-->ServiceMethod:toResponse-->GsonResponseBodyConverter:convert-->Gson-->Bean
xxCall.enqueue(new CallBack<xxBean>(){...})
涉及设计模式
借鉴的
- Retrofit 实例使用建造者模式通过Builder类构建。
当构造函数的参数大于4个,且存在可选参数的时候既可以使用 建造者设计模式 - Retrofit 创建时的callFactory,使用工厂方法设计模式,但是似乎并不打算支持其他的工厂。
- 整个retrofit 采用的时外观模式。统一的调用创建网络请求接口实例和网络请求参数配置的方法
- retrofit里面使用了动态代理来创建网络请求接口实例,这个是retrofit对用户使用来说最大的复用,其它的代码都是为了支撑这个动态代理给用户带来便捷性的
- 使用了策略模式对serviceMethod对象进行网络请求参数配置,即通过解析网络请求接口方法的参数、返回值和注解类型,从Retrofit对象中获取对应的网络的url地址、网络请求执行器、网络请求适配器和数据转换器
- ExecuteCallBack 使用装饰者模式来封装callbackExecutor,用于完成线程的切换
- ExecutorCallbackCall 使用静态代理(委托) 代理了Call进行网络请求,真正的网络请求由okhttpCall执行,然而okHttpCall不是自己执行,它是okhttp 提供call给 外界(retrofit)使用的唯一门户,其实这个地方就是门面模式
- ExecutorCallbackCall 的被初始化是在 ExecutorCallAdapterFactory里面通过适配器模式被创建的。
- CallAdapter采用了适配器模式 为创建访问Call接口提供服务。默认不添加Rxjava则使用默认的ExecutorCallAdapterFactory 将okhttp3.call转变成为 retroift中的call,如果有Rxjava则将okhttp3.call转化为abservable