两种写法:

//一个Builder对应一个对象,build之前已经创建好对象
class Builder {
    private Person person = new Person();

    public void name(String name) {
        person.name = name;
    }

    public void build() {
        return person;
    }
}

//一个Builder可以用于创建多个对象,
class Builder {
    private String name;

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

    public void build() {
        //把Builder传进去,构造函数中取属性赋值
        return new Person(this);
    }
}

问题:

  1. 多个参数,创建对象的时候不知道每个参数顺序和具体含义,可读性较差。
  2. 如果参数可选,需要写多个构造函数。
  3. build之前可以随时进行添加,不用一次性创建完毕

Kotlin、Dart、Python等语言支持命名参数,可选参数,能解决第一个和第二个问题

实例

Android对话框AlertDialog.Builder

OkHttp的Request.Builder

results matching ""

    No results matching ""