Jon*_*ary 7 java standards builder
我最近写了一个构建器类,并注意到标准似乎如下
public class PersonBuilder {
private String firstName;
private String lastName;
public PersonBuilder withFirstName(String firstName) {
this.firstName = firstName;
return this;
}
public PersonBuilder withLastName(String lastName) {
this.lastName = lastName;
return this;
}
public Person build() {
return new Person(this);
}
}
Run Code Online (Sandbox Code Playgroud)
相反,做以下事情是否有任何不利之处
public class PersonBuilder {
private Person person;
public PersonBuilder withFirstName(String firstName) {
person.setFirstName(firstName);
return this;
}
public PersonBuilder withLastName(String lastName) {
person.setLastName(lastName);
return this;
}
public Person build() {
return person;
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这可能是一个基于意见的问题,我只是在寻找任何答案,为什么这可能是一个坏的或更好的设计模式.
您的方法存在一些问题.其中一些在之前的答案中有所描述,所以我只会提到其他答案.
您的设计的最大问题是您Person在构建器中使用单个实例.这意味着如果您不止一次使用同一个构建器,那么您将"构建"相同的实例,而使用它的客户端则需要两个不同的实例.无需提及这可能会对您的应用程序造成严重破坏.
你从@Basilevs得到的答案提到"建成"类需要setter.这是绝对正确的,但我想强调这是一个很大的问题,因为这意味着你"构建"的类永远不会是不可变的!换句话说,如果需要,您可以将这些类的实现者限制为使用同步来实现线程安全,以及使用通用方法可以避免的其他问题解决机制.
| 归档时间: |
|
| 查看次数: |
1082 次 |
| 最近记录: |