В чем преимущества использования шаблона построителя внутри класса вне класса?Builder Pattern внутри vs вне класса?
Внутри класса:
public class Person {
private String name;
private String eyeColor;
private String hairColor;
public Person setName(String name) {
this.name = name;
return this;
}
public Person setEyeColor(String eyeColor) {
this.eyeColor = eyeColor;
return this;
}
public Person setHairColor(String hairColor) {
this.hairColor = hairColor;
return this;
}
}
// Example usage:
Person p = new Person()
.setName("Bob")
.setHairColor("Black")
.setEyeColor("Brown")
Вне класса:
public class Person {
private String name;
private String eyeColor;
private String hairColor;
public Person(String name, String eyeColor, String hairColor) {
this.name = name;
this.eyeColor = eyeColor;
this.hairColor = hairColor;
}
}
public class PersonBuilder {
private String name;
private String eyeColor;
private String hairColor;
public Person build() {
return new Person(name, eyeColor, hairColor);
}
public PersonBuilder with(String name) {
this.name = name;
return this;
}
public PersonBuilder setEyeColor(String eyeColor) {
this.eyeColor = eyeColor;
return this;
}
public PersonBuilder setHairColor(String hairColor) {
this.hairColor = hairColor;
return this;
}
}
// Example usage:
Person p = new PersonBuilder()
.setName("Bob")
.setHairColor("Black")
.setEyeColor("Brown")
.build();
Это мнение основано ... Но я думаю, что его внутри понижает беспорядок. Вы можете иметь MyClass.Builder, MyClass2.Builder и т. Д. - и не иметь целую кучу классов MyClassBuilder, MyClass2Builder и т. Д. – ppeterka
Для простых вещей это не имеет особого значения, однако вы можете использовать типы возвращаемых значений setter для некоторых других (в сложных сеттерах), и в этом случае внешняя была бы более гибкой. Лично я пойду с внешним. – Thihara
ИМХО, Строитель должен быть внутренним классом, потому что он предназначен исключительно для построенного класса. Из-за этого нет никакой реальной выгоды в том, чтобы сделать его обычным классом. – hfontanez