用复合键,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()
上创建一个新对象。
现在,这些行的复杂度并没有太大差异,但是随着创建更大的对象,并且固定值在许多对象之间保持一致,代码变得更加难以管理,因为如果每个对象都必须更新每个构建器语句,需要基本更改。
假设您仅传递引用和更新值,这是对构建器范式的适当使用,还是构建器范式的概念严格来说是一个构建器产生一个对象?
总是使用相同的构建器来创建多个对象。毕竟,这是构建器的基本目的,即构建对象。
您使用构建器的方式是完全可以接受的。