Builder模式中静态类的成员应该是final吗?

时间:2014-11-25 17:31:10

标签: java final builder

所以我在Builder Pattern上看到了几个例子。总之,静态类或Builder只有那些可以由构造函数初始化的最终成员。示例 -

public class User {
        private final String firstName; // required
        private final String lastName; // required
        private final int age; // optional

    private User(UserBuilder builder) {
            this.firstName = builder.firstName;
            this.lastName = builder.lastName;
            this.age = builder.age;
            this.phone = builder.phone;
            this.address = builder.address;
        }

    public String getFirstName() {
            return firstName;
        }

    public String getLastName() {
            return lastName;
        }

    public int getAge() {
            return age;
        }

    public static class UserBuilder {
            private final String firstName;
            private final String lastName;
            private int age;

    public UserBuilder(String firstName, String lastName) {
                this.firstName = firstName;
                this.lastName = lastName;
            }

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

为什么只有First和Last Name是最终的,可以被构造函数初始化?那之后不能设置?我的疑问是,我不能从First和Last中删除最后一个并且有一个构造函数初始化所有三个成员并且在类中也有相应的setter吗?

1 个答案:

答案 0 :(得分:2)

这里的设计是必须设置名字总是,但年龄是可选的。 (我本来会在这里使用Integer,而不是默认为0 ......但是我还是喜欢使用birthDate ......但我离题了。)

"需要vs可选"部分通过强制在建筑上出现的名字和姓氏进行沟通......那你为什么还想要制定者呢?你想什么时候在构造函数中将名字设置为一个东西,然后改变它?

可以使这些字段成为非最终字段并添加setter ......我只是觉得这样做不是特别好。这不是任何失败的问题,而只是对通过API设计传达的内容的改变。