Skip to content

建造者模式

优点

  • 不需要知道参数顺序, 参数设置顺序可以任意组合
  • 需要新增参数时,只需在 Builder 类中添加对应方法即可,不影响已有代码,符合开闭原择(OCP)
  • 链式调用
  • 可以在 build() 方法中统一做参数校验,避免对象处于非法状态

实现

java
public class User {
    private String name;
    private int age;
    private String address;

    private User(Builder builder) {
        this.name = builder.name;
        this.age = builder.age;
        this.address = builder.address;
    }

    public static Builder builder() {
        return new Builder();
    }

    public static class Builder {
        private String name;
        private int age;
        private String address;

        public Builder setName(String name) {
            this.name = name;
            return this;
        }
        public Builder setAge(int age) {
            this.age = age;
            return this;
        }
        public Builder setAddress(String address) {
            this.address = address;
            return this;
        }

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

调用

java
    User user = User.builder()
                    .setName("John")
                    .setAge(30)
                    .setAddress("123 Main St")
                    .build();

Released under the MIT License.