Какое из следующего является лучшим подходом к реализации шаблона построителя?
1) Используя объект для сборки вместо всех его свойств в построителе (и создайте его в конструкторе конструктора):
public class Person {
private String firstName;
// other properties ...
private Person() {}
// getters ...
public static class Builder {
// person object instead of all the person properties
private Person person;
public Builder() {
person = new Person();
}
public Builder setFirstName(String firstName) {
person.firstName = firstName;
return this;
}
// other setters ...
public Person build() {
if (null == person.firstName) {
throw new IllegalStateException("Invalid data.");
}
return person;
}
}
}
2) Используя свойства объекта для сборки вместо объекта непосредственно в построителе (и создайте его в методе build()):
public class Person {
private String firstName;
// other properties ...
private Person() {}
// getters ...
public static class Builder {
// person properties instead of object
private String firstName;
// other properties ...
public Builder() {}
public Builder setFirstName(String firstName) {
this.firstName = firstName;
return this;
}
// other setters ...
public Person build() {
if (null == this.firstName) {
throw new IllegalStateException("Invalid data.");
}
Person person = new Person();
person.firstName = firstName;
return person;
}
}
}
Я предпочитаю первый способ, потому что считаю, что с множеством свойств повторить их в построителе избыточно. Существуют ли некоторые недостатки с первым подходом?
Спасибо заранее и извините за мой плохой английский.