Retrofit原理(五):设计模式和总结

Retrofit里面还充斥着大量的设计模式

建造者模式

首先肯定是建造者模式,这个太普遍了,几乎哪里都使用到了,就不做过多的说明

工厂模式

然后是工厂模式,采用的是抽象工厂模式,在它额Converter抽象类中可以很明显的看到

public interface Converter<F, T> {
  @Nullable T convert(F value) throws IOException;

  /** Creates {@link Converter} instances based on a type and target usage. */
  abstract class Factory {

    public @Nullable Converter<ResponseBody, ?> responseBodyConverter(Type type,
        Annotation[] annotations, Retrofit retrofit) {
      return null;
    }


    public @Nullable Converter<?, RequestBody> requestBodyConverter(Type type,
        Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) {
      return null;
    }


    public @Nullable Converter<?, String> stringConverter(Type type, Annotation[] annotations,
        Retrofit retrofit) {
      return null;
    }


    protected static Type getParameterUpperBound(int index, ParameterizedType type) {
      return Utils.getParameterUpperBound(index, type);
    }


    protected static Class<?> getRawType(Type type) {
      return Utils.getRawType(type);
    }
  }
}

在这里插入图片描述
其中还有个工厂方法模式,这里要注意一下其中的区别。
抽象工厂是由工厂方法实现的,抽象工厂描述的是一个宏观的概念,工厂方法则是具体到细节上了。

适配器模式

这个则是在CallAdapter中得到了充分的体现。
适配器模式的UML描述如下:个人感觉很容易理解的一种模式
在这里插入图片描述
在Retrofit的使用如下:
在这里插入图片描述
这里还包括很多自定义的CallAdapter等等,都能够完成相应的适配转换。

代理模式

可能这就是Retrofit的一个突出特点了,但是要注意,Retrofit并没有实现代理模式,只是用到了java的动态代理方法。
这里包括了静态代理和动态代理。代理模式UML图如下
在这里插入图片描述
联想到明星和经纪人的关系也就很容易理解了。
这里也要提一下代理模式和装饰模式的区别,从结构和UML图上来看,两者很相似,所有区别我觉得就应该在语义上面,
代理的作用是控制一个对象的访问,即不能直接访问到该对象
装饰的作用则是增强对象,新加某个原对象不具有的功能
设计模式毕竟是要实现某个目标的,所有要从目的上考虑设计模式,而不是根据设计模式的结果反推怎么使用。
下面做个总结吧
在这里插入图片描述
Retrofit也就基本了解了,越到后面越是体会到了什么叫做高度的解耦,大神的构思果然令人赞叹,下面引用其他人的完成总体的流程吧Retrofit分析-漂亮的解耦套路
在这里插入图片描述

发布了38 篇原创文章 · 获赞 6 · 访问量 3402

猜你喜欢

转载自blog.csdn.net/qq_37704124/article/details/100052915