在创建具有相同值的多个对象时重用构建器实例是可以接受的吗?

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

用复合键,keyA和keyB,一些值和lombok构建器注释考虑以下POJO。

@Builder
class Foo {
    int keyA;
    int keyB;
    String author;
    String value;

    ... other stuff

}

使用传统的构建器范例,您只需将所有构建器元素链接在一起。

List<Foo> list = new ArrayList<>();
list.add(Foo.builder().keyA(1234).keyB(1).author("Bob Jones").value(...).build());
list.add(Foo.builder().keyA(1234).keyB(3).author("Bob Jones").value(...).build());
list.add(Foo.builder().keyA(1234).keyB(4).author("Bob Jones").value(...).build());
list.add(Foo.builder().keyA(1234).keyB(5).author("Bob Jones").value(...).build());
list.add(Foo.builder().keyA(1234).keyB(7).author("Bob Jones").value(...).build());

相反,我可以将构建器另存为变量并重复使用,仅覆盖某些值。

List<Foo> list = new ArrayList<>();
Foo.FooBuilder builder = Foo.builder().keyA(1234).author("Bob Jones");

list.add(builder.keyB(1).value(...).build());
list.add(builder.keyB(3).value(...).build());
list.add(builder.keyB(4).value(...).build());
list.add(builder.keyB(5).value(...).build());
list.add(builder.keyB(7).value(...).build());

在每次构建调用之间都会覆盖构建器值,并在build()上创建一个新对象。

现在,这些行的复杂度并没有太大差异,但是随着创建更大的对象,并且固定值在许多对象之间保持一致,代码变得更加难以管理,因为如果每个对象都必须更新每个构建器语句,需要基本更改。

假设您仅传递引用和更新值,这是对构建器范式的适当使用,还是构建器范式的概念严格来说是一个构建器产生一个对象?

java builder lombok
1个回答
3
投票

总是使用相同的构建器来创建多个对象。毕竟,这是构建器的基本目的,即构建对象。

您使用构建器的方式是完全可以接受的。

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