Effective Java (高效 Java) 第三版-构造方法参数过多时使用 builder 模式

Effective Java (高效 Java) 第三版-构造方法参数过多时使用 builder 模式

Laughing
2022-07-31 / 0 评论 / 757 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年07月31日,已超过901天没有更新,若内容或图片失效,请留言反馈。

静态工厂和构造方法都有一个限制:它们不能很好地扩展到很多可选参数的情景。
考虑我们有一个人员的类,如果只有姓名是必填的,年龄可选的,也许我们可以提供两个构造函数,但是试想一下,如果有两个类型一样的参数,是不是就没法重载了。或者可选的参数比较多,就比较麻烦了。
这个时候,我们就可以考虑builder模式了。


public class Person {

    private String name;

    private int age;

    public static class Builder {

        private String name;

        private int age;

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

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

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

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

    }

    public Person(Builder builder) {
        this.name = builder.name;
        this.age = builder.age;
    }

    public void desc() {
        System.out.println("姓名:" + name + ",年龄:" + age);
    }

}

调用

Person person = new Person.Builder("张三").withAge(30).build();
person.desc();
1

评论 (0)

取消