【发布时间】:2016-03-29 00:25:05
【问题描述】:
下一个 sn-p 展示了如何在 Java 中实现一个基本的构建器模式。
public class User {
private final String firstName; // required
private final String lastName; // required
private final int age; // optional
private final String phone; // optional
private final String address; // 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 String getPhone() {
return phone;
}
public String getAddress() {
return address;
}
public static class UserBuilder {
private final String firstName;
private final String lastName;
private int age;
private String phone;
private String address;
public UserBuilder(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public UserBuilder age(int age) {
this.age = age;
return this;
}
public UserBuilder phone(String phone) {
this.phone = phone;
return this;
}
public UserBuilder address(String address) {
this.address = address;
return this;
}
public User build() {
return new User(this);
}
}
问:如果我有多个 User 类的模型,并且具有相同的超类(例如抽象/非抽象 SuperUser 作为超类,并且 UserA、UserB、UserC 扩展了它), 我如何用更少的代码来实现构建器而不是为每个类添加特定的构建器,我喜欢为所有子类创建一个构建器
感谢
【问题讨论】:
-
我建议基于主构建器为每个子类编写一个内部类,然后创建静态方法来访问内部构建器
-
然后在应该改变所有字段访问公共,它不会破坏模式范式?
标签: java inheritance builder