在创建具有相同值的多个对象时重用构建器实例是否可以接受?
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()
上创建一个新对象。
现在,这些行在复杂性上并没有太大差异,但是随着创建更大的对象,其中许多对象的固定值保持一致,代码变得更难管理,因为如果出现以下情况,您必须更新每个构建器语句他们每个人都需要一个基本的改变。
假设您只传递引用和更新值,这是对构建器范式的适当使用,还是构建器范式的概念严格来说是一个构建器产生一个对象?
使用同一个构建器创建多个对象总是合适的。毕竟,这是构建器的基本目的,构建对象。
您使用生成器的方式完全可以接受。
考虑以下带有复合键、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()
上创建一个新对象。
现在,这些行在复杂性上并没有太大差异,但是随着创建更大的对象,其中许多对象的固定值保持一致,代码变得更难管理,因为如果出现以下情况,您必须更新每个构建器语句他们每个人都需要一个基本的改变。
假设您只传递引用和更新值,这是对构建器范式的适当使用,还是构建器范式的概念严格来说是一个构建器产生一个对象?
使用同一个构建器创建多个对象总是合适的。毕竟,这是构建器的基本目的,构建对象。
您使用生成器的方式完全可以接受。