使用构建器模式更新对象

时间:2019-02-28 00:45:17

标签: java builder

我最近发现了这种模式,并试图将其实现到我的项目中。它完成了它应该做的事情。但是,试图找到一个不错的解决方案来对其进行更新。提出了一种解决方案,我想知道它是否“可以接受”。

唯一的区别是我在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();

这种方法可以接受吗?

2 个答案:

答案 0 :(得分:1)

如果您要创建一个 new 用户,并从其他用户复制字段并进行一些更改,那么这会很好:

anotherUser = new User.Builder(user).phoneNumber("my number").build();

但是,如果您要将新对象分配回user变量,则表明您正在更新现有用户。要进行更新,您正在创建一个全新的对象并复制字段,这效率很低。您应该使用二传手。

答案 1 :(得分:0)

在对象为空或部分填充后,应该使用setter和getter进行操作。

在我看来,与构建器模式相比,最好使用jackson objectMapper,它可以自动处理新参数,而无需在构建器模式中添加额外的代码行,而且更clean code