Jakie są zalety między używaniem wzorca budowniczego wewnątrz i poza klasą?Builder Pattern inside vs outside class?
Wewnątrz klasy:
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")
klasa zewnętrzna:
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();
To jest oparte na opiniach ... Ale myślę, że posiadanie tego w środku obniża poziom bałaganu. Możesz mieć MyClass.Builder, MyClass2.Builder, itd. - i nie mieć całej gamy klas MyClassBuilder, MyClass2Builder, itp. – ppeterka
Dla prostych rzeczy to naprawdę nie ma znaczenia, jednak możesz chcieć użyć typów zwrotnych ustawiających dla innych wskazanie (w kompleksowych ustawieniach), w którym to przypadku zewnętrzna oferowałaby większą elastyczność. Osobiście pójdę z zewnętrznym. – Thihara
IMHO, Builder powinien być wewnętrzną klasą, ponieważ ma być używany wyłącznie przez budowaną klasę. Z tego powodu nie ma prawdziwej korzyści z uczynienia z niego regularnej klasy. – hfontanez