Retrofit适用蛮多的设计模式,一起看下吧。
构建者设计模式
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Config.baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.build();
- 通过构建者模式构建Retrofit对象,遵循简单、灵活的思想,传入必选参数,可选参数使用默认的;后续增加必选参数,也不至于需要增加重载函数来解决;如果缺少传入必选参数,可以做报错处理,让报错点提前。
外观设计模式
public final class Retrofit {
private final Map<Method, ServiceMethod<?>> serviceMethodCache = new ConcurrentHashMap<>();
final okhttp3.Call.Factory callFactory;
final HttpUrl baseUrl;
final List<Converter.Factory> converterFactories;
final List<CallAdapter.Factory> callAdapterFactories;
final @Nullable Executor callbackExecutor;
final boolean validateEagerly;
- Retrofit其实是封装了ServiceMethod缓存、执行引擎、基地址、结果解析器、回调执行器、返回值适配器多个子模块,对于使用者来说,只需要关注Retrofit即可,隐藏不必要的逻辑处理以及遵循最少知识原则。
代理设计模式
- 动态代理
- Retrofit通过动态搭理生成代理对象,对所有的请求做统一的封装、处理(参数、注解、参数值);
- 静态代理 juejin.cn/post/709529… 这篇文章分析了Retrofit发起请求的过程,里面提到ExecutorCallbackCall代理OkHttpCall,后者代理okhttp3.Call完成发起网络请求;每一层代理都有自己的作用,起到了很好的功能增强,对于调用者来说,只管发起请求监听结果即可。