Retrofit2源码解析01-创建过程

Retrofit通过建造者模式进行创建

    Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(url)
                .addConverterFactory(GsonConverterFactory.create())
                .build();  

build方法主要进行了初始化赋值

    public Retrofit build() {
      //...
      okhttp3.Call.Factory callFactory = this.callFactory;
      //如果callFactory为null,则赋值为OkHttpClient
      if (callFactory == null) {
        callFactory = new OkHttpClient();
      }

      Executor callbackExecutor = this.callbackExecutor;
      //如果callbackExecutor为null,赋值为相应平台默认的Excutor,用作回调回UI线程
      if (callbackExecutor == null) {
        callbackExecutor = platform.defaultCallbackExecutor();
      }

      //将Call对象转化的合适执行类的List,比如RxJavaCallAdapterFactory
      List<CallAdapter.Factory> adapterFactories = new ArrayList<>(this.adapterFactories);
      //根据不同平台 添加默认CallAdapterFactory
      adapterFactories.add(platform.defaultCallAdapterFactory(callbackExecutor));

      //转化数据对象的List,比如GsonConverterFactory
      List<Converter.Factory> converterFactories = new ArrayList<>(this.converterFactories);

      //传入参数,创建Retroft对象
      return new Retrofit(callFactory, baseUrl, converterFactories, adapterFactories,
          callbackExecutor, validateEagerly);
    }

其中,这里的platform对象在Builder对象构造方法中初始化

    public Builder() {
      this(Platform.get());
    }  

来看Platform.get(),get方法想到于是一个工厂模式,而Platform显然是策略模式,根据不同的平台,执行不同的操作。

    class Platform {
        private static final Platform PLATFORM = findPlatform();
        
        static Platform get() {
        return PLATFORM;
        }
        
        private static Platform findPlatform() {
            try {
              Class.forName("android.os.Build");
              //如果是Android平台
              if (Build.VERSION.SDK_INT != 0) {
                return new Android();
              }
            } catch (ClassNotFoundException ignored) {
            }
            try {
              //如果是Java平台
              Class.forName("java.util.Optional");
              return new Java8();
            } catch (ClassNotFoundException ignored) {
            }
            try {
              //如果是IOS平台
              Class.forName("org.robovm.apple.foundation.NSObject");
              return new IOS();
            } catch (ClassNotFoundException ignored) {
            }
            return new Platform();
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

氦客

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值