在課堂外使用生成器模式的優點是什麼?內部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