retrofit设计模式

时间:2024-03-16 09:05:27

retrofit 的设计模式

1. 建造者模式

建造者模式的定义是:将一个复杂对象的构造与它的表示分离,使得建造过程可以创建不同的表示

我们来看一下retrofit的构建代码
retrofit设计模式
很明显的建造者模式

2. 门面模式

门面模式要求一个子系统的外部与其内部通信必须通过一个统一的对象进行,而retrofit里这个统一的对象就是我们创建的Retrofit对象,我们只管配置Retrofit,然后获取接口对象请求数据,其他的都是Retrofit框架内部的事情了,我们不需要关心

3. 动态代理

动态代理是指在程序运行时创建代理类的方式,详细参考https://www.jianshu.com/p/a8dbf9ca7b21

很明显的在create方法里使用了动态代理去创建接口对象,如下
retrofit设计模式

4.适配器模式

适配器模式的定义是将一个类的接口变换为客户端期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。而retrofit里CallAdapter使用的就是此模式,它的类注释是Adapts a {@link Call} with response type {@code R} into the type of {@code T},谷歌翻译一下为 将响应类型为{@code R}的{@link Call}修改为{@code T}类型,直接看可能不容易理解但是当我们使用RxJava时使用的RxJava2CallAdapter
retrofit设计模式
它将Call<R>类型转换为了,Object类型,之所以是Object类型,是因为RxJava支持Flowable、Single、Single、Observable等多种类型,所以取了他们的父类

5. 抽象工厂模式

抽象工厂模式的定义是为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。retrofit里CallAdapter.Factory为抽象工厂,CallAdapter为工厂的产品接口,不同的CallAdapter.Factory抽象工厂创建不同的CallAdapter产品

6.工厂方法模式

工厂方法模式的定义是,定义一个用于创建对象的接口,让子类决定实例化哪一个类。而CallAdapter接口也是这个接口,它的adapt方法则是这个创建对象的方法。例如RxJava2CallAdapter的adapt方法将会创建一个RxJava的事件流对象,而ExecutorCallAdapterFactory下的匿名内部类CallAdapter则会创建ExecutorCallbackCall对象

7. 装饰模式

装饰模式的定义是在不改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。retrofit里ExecutorCallbackCall就是使用了此模式,例如ExecutorCallbackCall增强了OkHttpCall的功能,OkHttpCall的enqueue方法模式是异步的,在子线程调用,回掉也会在子线程,但ExecutorCallbackCall增强了这个方法,使其回调会切换到主线程。它与代理模式很相似。

代理模式和装饰模式区别是:

装饰模式,装饰后的对象还是"我",只不过装饰完后"我"更加强大了,

代理模式,代理后的对象已经不是"我"了,只不过代理可以联系到"我"而已