retrofit设计模式

retrofit设计模式


上面我们已经了解了整个Retrofit的网络架构,那么为什么它要这么实现呢?

Retrofit的设计模式:

门面模式:

Retrofit类就是门面模式的实现类,同样的Glide也是这样

同样的当我们在创建一个比较独立,功能比较完善的模块的时候,我们也需要考虑给调用者提供一个比较简单的入口,门面模式就是完美的解决方案

然后呢,这个门面类最好能提供一些注释,包括一个简单的示例代码,尽量方便调用者的理解和尽快上手

动态代理:

代理出现的目的其实就是想要在被代理类的方法执行前后做一些操作

我们知道动态代理比较适合处理统一的操作,因为静态代理的缺点就是需要把被代理类的方法全部实现一遍,比较繁琐,因此出现了动态代理

retrofit实现的的动态代理实际上是不太标准的,因为标准的动态代理需要一个interface实现类,也就是委托类,代理类虽然会进行一些自己的处理,但是任然会调用委托类的对应方法

而retrofit没有这么做,因为retrofit的目的就是拿到你的这个方法,然后解析你的注释进行配置

面向切面编程会需要动态代理

适配器模式:

retrofit里面最难理解的就是适配器模式

我们先来理解一下适配器模式,适配器模式就是将一个已经存在的东西转成一个适合我们使用的东西

那么为什么retrofit需要这个一个类似转接头的东西呢?

我们看转接的东西是什么是OkHttpCall,为什么需要转接,因为使用不方便,OkHttpCall的操作请求都是在子线程里面,我们需要实现线程的切换,那么retrofit就提供了这个功能,再然后呢,RxJava出现我们发现RxJava可以给我们提供很多方便的功能,所以说呢我们就需要这么一个转接头了,这个转接头可以让RxJava等其他的实现方式去操作OkHttpCall,

策略模式:

在Rxjava 里面有三个CallAdapter :request /response/simple

策略模式就是根据外层的定义使用算法进行特定的处理

那么在Rxjava 里面就是通过我们在外层定义的返回值,例如:

@POST("api/familyEvent/publish")
Observable<WrapDataBean<EventResultBean>> publish(@Body EventPublishParams params);
Observable<WrapDataBean<Response<EventResultBean>>> publish(@Body EventPublishParams params);

通过定义的返回值的类型去判断需要执行什么策略,也就是返回什么类型的CallAdapter