我已经看到了Builder模式的许多实现(主要是Java)。它们都有一个实体类(假设是一个Person
类)和一个构建器类PersonBuilder
。构建器“堆叠”各种字段,并返回new Person
带有传递的参数的。为什么我们显式需要一个构建器类,而不是将所有构建器方法放在Person
类本身中?
例如:
class Person {
private String name;
private Integer age;
public Person() {
}
Person withName(String name) {
this.name = name;
return this;
}
Person withAge(int age) {
this.age = age;
return this;
}
}
我可以简单地说 Person john = new Person().withName("John");
为什么需要PersonBuilder
上课?
我看到的唯一好处是,我们可以将Person
字段声明为final
,从而确保了不变性。
withName
返回“人”的副本,但只更改“名称”字段。换句话说,Person john = new Person().withName("John");
即使Person
是不可变的也可以工作(这是函数编程中的常见模式)。
void
方法。因此,例如,如果Person
有一个打印其名称的方法,您仍然可以使用Fluent Interface链接它person.setName("Alice").sayName().setName("Bob").sayName()
。顺便说一句,我确实用您的建议注释了JavaDoc中的那些注释@return Fluent interface
-当它适用于return this
在其执行结束时执行的任何方法时,它是通用且足够清晰的,并且非常清楚。因此,Builder也将做一个流畅的界面。
chainable setters
:D