使用构建器模式更新对象

问题描述 投票:1回答:2

我最近发现了这个模式并尝试将其实现到我的项目中。它做了它想做的事情。但是,试图找到一个很好的解决方案来更新它。提出了一个解决方案,我想知道它是否“可接受”。

我做的只有一个区别是我在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();

这种方法可以接受吗?

java builder
2个回答
1
投票

如果您想要创建一个新用户,其中包含从其他用户复制的字段,并进行一些更改,这是很好的:

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

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


0
投票

一旦你把对象弄空或者部分填充并不重要,你应该设置setter和getter。

另外在我看来,最好使用jackson objectMapper与构建器模式进行比较,它会自动处理新参数,而不会在构建器模式中添加额外的代码行,而且还有更多的clean code

© www.soinside.com 2019 - 2024. All rights reserved.