Retrofit设计模式源码解析

由于Retrofit作到了很强的解耦,所以就必定须要用到不少设计模式。因此,我以为,经过阅读Retrofit源码来学习设计模式是再好不过的设计模式学习方法了。设计模式

大体看了一圈Retrofit源码,受益不浅。 从网上盗用两张图,以下: 对于网络请求库的封装,主要包括3部分:网络

一、数据的组装框架

二、发送网络请求学习

三、处理返回数据,并回调结果优化

对于步骤一,数据的组装:ui

Retrofit采用了外观模式(门面模式)、动态代理模式和建造者模式。Retrofit利用了接口的的方式,将请求数据规范成一个接口,而后经过对用户定义的接口进行解析,而后将解析的数据组装成请求的数据。设计

Retrofit类做为外部使用的惟一入口,这是一种外面模式,也叫门面模式。用户使用时,只须要使用Retrofit的create方法就能够。3d

那么用户定义的接口是如何转换成请求数据的呢?Retrofit很是精彩地使用了动态代理,去解析用户定义接口方法中的注解和返回值。代理

对解析的数据进行组装使用的是建造者模式。该建造者模式的实现类是ServiceMethod的Builder类。blog

对于步骤二,发送网络请求:

Retrofit使用了适配器模式、工厂方法模式、策略模式。

Retrofit默认使用了OkHttpCall进行网络请求,这块是写死的代码,之后可能会优化,也多是square公司如今在绑定推广retrofit和okhttp吧,可是从Retrofit的设计上看,将网络请求库改为可灵活配置,也是比较容易的。

由于Retrofit在网络库的配置上采用了适配器模式。其中,CallAdapter就是用于调用OkHttpCall进行网络请求的。

Retrofit定义了CallAdapter接口和CallAdapter.Factory接口,这是一种工厂方法模式,只有在框架的灵活配置上才会使用工厂方法模式。

对于Retrofit的策略模式,在Java8CallAdapter中使用了,根据不一样的状况返回BodyCallAdapter和ResponseCallAdapter。

对于步骤三,处理返回数据,并回调结果

是在OkHttpCall中进行的。采用了工厂方法模式。

Retrofit定义了Converter和Converter.Factory接口,进行数据的处理。这是工厂方法模式。

用Converter对返回结果进行处理,是在ServiceMethod类中的方法中进行的,而这个方法是在OkHttpCall中调用的。

 

综上,经过阅读Retrofit源码,让我对设计模式的理解更加深刻。理解了一些在头脑中以前很模糊的设计模式概念。

相关文章
相关标签/搜索