美文网首页
建造者设计模式

建造者设计模式

作者: gczxbb | 来源:发表于2019-08-08 11:47 被阅读0次

一、概念

一个对象A内部依赖的对象比较多,依赖a1,a2,a3..,每个ax对象都很复杂,A类可以用建造者设计模式创建A对象。
比如,将A类当成一个房子,它依赖关联的内容当成房子建造的必要材料,砖头,木材,钢筋。创建A对象时,由各类材料对象build()组合成一个对象,这样的设计模式(架构)可以理解成房子搭建图纸。

Retrofit retrofit = new Retrofit.Builder().baseUrl(HostIp)
              .addConverterFactory(GsonConverterFactory.create())
              .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
              .client(okHttpClient)
              .build();

创建一个Retrofit对象,内部依赖,包括HttpUrl,转换器,适配器,工厂。普通情况,创建Retrofit对象,将每个依赖对象创建,set到内部,一个框架,依赖对象最好的情况是可配置,外部可自定义对象或不自定义即默认对象。

final okhttp3.Call.Factory callFactory;
final HttpUrl baseUrl;
final List<Converter.Factory> converterFactories;
final List<CallAdapter.Factory> adapterFactories;
final @Nullable Executor callbackExecutor;
final boolean validateEagerly;

静态内部类Builder,创建一个Builder对象,用户可以自定义Retrofit的依赖对象。在最终build()方法,根据配置依赖对象,以及兜底默认对象,组装成Retrofit。

public Builder client(OkHttpClient client) {
    return callFactory(checkNotNull(client, "client == null"));
}

public Builder callFactory(okhttp3.Call.Factory factory) {
    this.callFactory = checkNotNull(factory, "factory == null");
    return this;
}

public Builder baseUrl(String baseUrl) {
    checkNotNull(baseUrl, "baseUrl == null");
    HttpUrl httpUrl = HttpUrl.parse(baseUrl);
    if (httpUrl == null) {
        throw new IllegalArgumentException("Illegal URL: " + baseUrl);
    }
    return baseUrl(httpUrl);
}

Build类的方法,将外部设置的Retrofit依赖对象,保存到自己内部,每个方法都返回Build对象,链式调用。

public Retrofit build() {
    if (baseUrl == null) {
        throw new IllegalStateException("Base URL required.");
    }

    okhttp3.Call.Factory callFactory = this.callFactory;
    if (callFactory == null) {
        callFactory = new OkHttpClient();
    }

    Executor callbackExecutor = this.callbackExecutor;
    if (callbackExecutor == null) {
        callbackExecutor = platform.defaultCallbackExecutor();
    }

    List<CallAdapter.Factory> adapterFactories = new ArrayList<>(this.adapterFactories);
    adapterFactories.add(platform.defaultCallAdapterFactory(callbackExecutor));

    List<Converter.Factory> converterFactories = new ArrayList<>(this.converterFactories);

    return new Retrofit(callFactory, baseUrl, converterFactories, adapterFactories,
            callbackExecutor, validateEagerly);
}

build()方法,创建Retrofit对象,将Builder内部对象传递Retrofit依赖,外部未设置的对象,初始化默认值。

二、总结

优势:基于建造者模式设计的类创建一个对象时,可以在外部动态配置对象的内部依赖,简化创建方式,由零部件组装成一个整体对象的过程,内部Builder类是负责零件组装生产对象的类,build()方法即组装方法。


任重而道远

相关文章

  • 设计模式之建造者模式

    设计模式之建造者模式 Intro 简介 建造者模式: 建造者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加...

  • Retrofit

    Retrofit设计模式 动态代理,装饰模式,建造者模式,抽象工厂模式,适配器模式 建造者模式创建Retrofit...

  • java设计模式--建造者模式

    java设计模式--建造者模式 建造者模式定义 建造者模式:是将复杂对象的构建与表示进行分离,使同样的构建过程会有...

  • 建造者设计模式-Builder design pattern

    建造者设计模式是创建型设计模式的一种。创建型设计模式处理对象创建的问题。 建造者设计模式,用来构建需要经过若干个建...

  • 【Java设计模式】--建造者模式

    建造者模式(Bulider模式) 一、什么是建造者模式 建造者模式是设计模式的一种,将一个复杂对象的构建与它的表示...

  • Android中涉及的模式

    我的Java设计模式-建造者模式 我的Java设计模式-观察者模式 重学设计模式之单例模式

  • 设计模式之建造者模式

    设计模式之建造者模式 1. 模式定义 建造者模式又可以成为生成器模式,它属于对象创建型模式。建造者模式将一个复杂对...

  • 深圳7000+

    2019年的目标,努力 1.设计模式-建造者模式(抽象建造者,具体建造者,创建对象,指挥者),优点,缺点,使用场景...

  • 设计模式 - 目录

    设计模式01 - 单例模式 设计模式02 - 工厂模式 设计模式03 - 建造者模式 设计模式04 - 适配器模式...

  • 设计模式-构建者模式

    概念 建造者模式(英:Builder Pattern)是一种创建型设计模式,又名:生成器模式。GOF 给建造者模式...

网友评论

      本文标题:建造者设计模式

      本文链接:https://www.haomeiwen.com/subject/xmatjctx.html