vs içinde sınıf dışındaki kurucu örneğini kullanma arasındaki avantajları nelerdir?Builder Modeli dış sınıfa karşı mı?
İç sınıfı:
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")
Dış sınıfı: Duruma göre
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();
Bu görüş temelli olduğunu ... Ama içimde olan dağınıklığı düşürür düşünüyorum. MyClass.Builder, MyClass2.Builder, vb - olabilir ve MyClassBuilder, MyClass2Builder, vb sınıfları bir sürü yok – ppeterka
Basit şeyler için gerçekten önemli değil, ancak bazı diğer için setter dönüş türlerini kullanmak isteyebilirsiniz gösterge (karmaşık ayarlayıcılarda), bu durumda harici olan daha fazla esneklik sunacaktır. Şahsen ben dış olanı ile gideceğim. sınıf inşa tarafından özel olarak kullanılmak üzere tasarlanmıştır, çünkü – Thihara
IMHO, Oluşturucu bir iç sınıfı olmalıdır. Bundan dolayı, onu normal bir sınıf haline getirmek için gerçek bir fayda yoktur. – hfontanez