我想知道我的构建器对象实现与我在大多数站点上看到的构建器对象实现相比是否有缺点。我知道为只有 2 个字段的类实现构建器对象有点过分,但这些只是示例,而且应该很小。
我的实现:
public class User {
private String firstname;
private String lastname;
public String getFirstname() {
return firstname;
}
public String getLastname() {
return lastname;
}
private User(){}
public static class Builder{
private final User user;
public Builder(){
user = new User();
}
public Builder firstname(String firstname){
user.firstname = firstname;
return this;
}
public Builder lastname(String lastname){
user.lastname = lastname;
return this;
}
public User build(){
return user;
}
}
}
在互联网上找到的构建器对象( example1 example2 ):
public class User {
private String firstname;
private String lastname;
public String getFirstname() {
return firstname;
}
public String getLastname() {
return lastname;
}
private User(Builder builder){
this.firstname = builder.firstname;
this.lastname = builder.lastname;
}
public static class Builder{
private String firstname;
private String lastname;
public Builder firstname(String firstname){
this.firstname = firstname;
return this;
}
public Builder lastname(String lastname){
this.lastname = lastname;
return this;
}
public User build(){
return new User(this);
}
}
}
第二种实现似乎很麻烦,因为构建器需要具有与其要构建的对象完全相同的字段(阅读:编写相同的代码两次)。 对我来说,构建器创建新的 User 并填充其字段似乎更自然,而不是使用它自己的实例调用 User 的构造函数。 p>
这两个示例都可以通过以下方式进行测试:
public static void main(String[] args) {
User u = new User.Builder().firstname("Tom").lastname("Jonckheere").Build();
System.out.println(u.getFirstname());
System.out.println(u.getLastname());
}
所以我的问题是: 我的构建器对象的实现有哪些缺点?我真的不能告诉任何(我并不是说没有)所以我想听听一些反馈!或者我的代码也是构建器对象的有效实现?
最佳答案
实现的区别在于,如果您想创建多个相等(或相似)但不相同的对象,则必须创建一个新的Builder
,而使用其他实现时您可以这样做这个:
Builder b = new User.Builder();
User john = b.firstName("John").lastName("Smith").build();
User jack = b.firstName("Jack").build();
关于java - 我的构建器对象的实现有哪些缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30323895/