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

Is it acceptable to reuse a builder instance when creating multiple objects with identical values?

考虑以下带有复合键、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() 上创建一个新对象。

现在,这些行在复杂性上并没有太大差异,但是随着创建更大的对象,其中许多对象的固定值保持一致,代码变得更难管理,因为如果出现以下情况,您必须更新每个构建器语句他们每个人都需要一个基本的改变。

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

使用同一个构建器创建多个对象总是合适的。毕竟,这是构建器的基本目的,构建对象。

您使用生成器的方式完全可以接受。