Ưu điểm của việc sử dụng mẫu xây dựng bên trong so với bên ngoài lớp học là gì?Mô hình Builder bên trong và bên ngoài lớp học?
lớp Bên trong:
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")
Bên ngoài lớp:
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();
Đây là ý kiến dựa trên ... Nhưng tôi nghĩ rằng có nó bên trong làm giảm sự lộn xộn. Bạn có thể có MyClass.Builder, MyClass2.Builder, v.v. - và không có một bó toàn bộ MyClassBuilder, MyClass2Builder, vv các lớp học – ppeterka
Đối với những điều đơn giản nó không thực sự quan trọng, tuy nhiên bạn có thể muốn sử dụng các kiểu trả về setter cho một số khác chỉ định (trong những người định cư phức tạp), trong trường hợp đó người ngoài sẽ cung cấp sự linh hoạt hơn. Cá nhân tôi sẽ đi với một bên ngoài. – Thihara
IMHO, Trình xây dựng phải là một lớp bên trong vì nó có nghĩa là được sử dụng độc quyền bởi lớp đang được xây dựng. Bởi vì điều đó, không có lợi ích thực sự trong việc biến nó thành một lớp học bình thường. – hfontanez