建造者模式

简介

定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

使用场景:

  • 复杂对象的创建(多个参数)

  • StringBuilder

  • Lombok的@Builder

  • HTTP请求构建

实现要点:

  • 链式调用

  • 可选参数

  • 不可变对象

代码示例

  1. 建造者

@Data
public class User {
    private String name;
    private String desc;
    private Integer id;

    User(final String name, final String desc, final Integer id) {
        this.name = name;
        this.desc = desc;
        this.id = id;
    }

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

    public static class UserBuilder {
        private String name;
        private String desc;
        private Integer id;

        UserBuilder() {
        }

        public UserBuilder name(final String name) {
            this.name = name;
            return this;
        }

        public UserBuilder desc(final String desc) {
            this.desc = desc;
            return this;
        }

        public UserBuilder id(final Integer id) {
            this.id = id;
            return this;
        }

        public User build() {
            return new User(this.name, this.desc, this.id);
        }

        public String toString() {
            return "User.UserBuilder(name=" + this.name + ", desc=" + this.desc + ", id=" + this.id + ")";
        }
    }

}
  1. 使用方式

public class Test {
    public static void main(String[] args) {
        User user = User.builder()
                .id(1)
                .name("nnn")
                .desc("ddd")
                .build();
        System.out.println(user);
    }
}

Last updated

Was this helpful?