Builder 构造器模式

323 阅读1分钟

Lombok中看到@builder 便开始去了解

用处

当一个类中有诸多属性,有些属性我们必须填写,而有些属于有时需要而有时不需要填写(即可选属性),构造器模式便是为了解决这一问题。

即主要是为了解决创建对象时对于必填字段可选字段的问题。

用法

普通写法

我们需要写多个构造器去适配不同需求

public class Student {
    // 必选
    String name;
    // 可选
    int age;
    String title;

    public Student(String name) {
        this.name = name;
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Student(String name, int age, String title) {
        this.name = name;
        this.age = age;
        this.title = title;
    }
}

构造器写法

public class Student {
  // 必选
  private String name;
  // 可选
  private int age;
  private String title;

  private static class Builder {
      // 必选
      private String name;
      // 可选
      private int age;
      private String title;

      public Builder(String name) {
          this.name = name;
      }

      public Builder age(int age) {
          this.age = age;
          return this;
      }

      public Builder title(String s) {
          this.title = s;
          return this;
      }

      public Student build() {
          return new Student(this);
      }

  }

  private Student(Builder builder) {
      name = builder.name;
      age = builder.age;
      title = builder.title;
  }
}

要点:

  • 在builder类中的构造器中赋值所需的必填字段。

  • 构造器私有化,确保只允许使用builder方法进行初始化。

  • Builder类内部赋值return this.确保链式调用

优点:

  • 链式调用优雅,简单明了,代码可读性强。

Lombok

Lombok可以帮助我们实现builder,但是不能指定必填字段。