我最近发现了这种模式,并试图将其实现到我的项目中。它完成了它应该做的事情。但是,试图找到一个不错的解决方案来对其进行更新。提出了一种解决方案,我想知道它是否“可以接受”。
唯一的区别是我在Builder类中创建了另一个构造函数,该构造函数将调用对象作为参数:
public Builder (User user) {
this.userID = user.getUserID();
this.userName = user.getUserName();
...
//and so on
和主要方法
创建对象:
User user = new User.Builder("mandatory params")
.email("some email")
.build();
并更新:
user = new User.Builder(user).phoneNumber("my number").build();
这种方法可以接受吗?
答案 0 :(得分:1)
如果您要创建一个 new 用户,并从其他用户复制字段并进行一些更改,那么这会很好:
anotherUser = new User.Builder(user).phoneNumber("my number").build();
但是,如果您要将新对象分配回user
变量,则表明您正在更新现有用户。要进行更新,您正在创建一个全新的对象并复制字段,这效率很低。您应该使用二传手。
答案 1 :(得分:0)
在对象为空或部分填充后,应该使用setter和getter进行操作。
在我看来,与构建器模式相比,最好使用jackson objectMapper
,它可以自动处理新参数,而无需在构建器模式中添加额外的代码行,而且更clean code
。