只是绕过Builder模式,我有几个(新手)问题。主要是为什么我们不能仅简化构建器对象的创建?
代替此:
public final class Person{
private final String name;
private final String description;
private Person(String name, String description) {
this.name = name;
this.description = description;
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
public static class Builder {
private String name;
private String description;
public Builder setName(String name) {
this.name = name;
return this;
}
public Builder setDescription(String description) {
this.description = description;
return this;
}
public Person build() {
return new Person(name, description);
}
}
}
//Use it
Person p = new Person.Builder().setName("test").setDescription("description").build();
为什么不只使用这个?
public final class Person {
private String name;
private String description;
public String getName() {
return name;
}
public String getDescription() {
return description;
}
public Person setName(String name){
this.name=name;
return this;
}
public Person setDescription(String description){
this.description=description;
return this;
}
}
//Use it
Person p = new Person().setName("test").set("description");
我看到当您要构建一个不可变对象时,也许会使用第一个对象,但是除此之外,为什么我不能只使用第二个对象呢?这要简单得多。请尽可能提供示例。
如果人们必须使用非空名称怎么办?您应该不能创建无效的Person
对象。构造Person
对象确定地的默认方法不应使无效对象。那只是自找麻烦。
随着班级变得越来越复杂,您可能会遇到各种各样的规则,这些规则如何使人们不遵循这些规则。当您更改班级时,将会有新的规则被现有的用途所遵循。