ฉันเห็นการใช้งานหลายอย่างของรูปแบบตัวสร้าง (ส่วนใหญ่ใน Java) พวกเขาทั้งหมดมีคลาสเอนทิตี้ (สมมุติว่าPerson
คลาส) และคลาสบิลPersonBuilder
เดอร์ ผู้สร้าง "สแต็ค" ฟิลด์ที่หลากหลายและส่งกลับค่าnew Person
ด้วยอาร์กิวเมนต์ที่ส่งผ่าน ทำไมเราต้องมีคลาสผู้สร้างอย่างชัดเจนแทนที่จะใส่เมธอดผู้สร้างทั้งหมดลงในPerson
คลาสเอง?
ตัวอย่างเช่น:
class Person {
private String name;
private Integer age;
public Person() {
}
Person withName(String name) {
this.name = name;
return this;
}
Person withAge(int age) {
this.age = age;
return this;
}
}
ฉันสามารถพูดได้ Person john = new Person().withName("John");
ทำไมต้องPersonBuilder
เรียน?
ประโยชน์อย่างเดียวที่ฉันเห็นคือเราสามารถประกาศPerson
เขตข้อมูลได้อย่างfinal
มั่นใจ
withName
คืนสำเนาของบุคคลโดยเปลี่ยนเฉพาะชื่อฟิลด์ ในคำอื่น ๆPerson john = new Person().withName("John");
สามารถทำงานได้แม้ว่าPerson
จะไม่เปลี่ยนรูป (และนี่คือรูปแบบทั่วไปในการเขียนโปรแกรมการทำงาน)
void
วิธีการ ดังนั้นสำหรับตัวอย่างเช่นถ้ามีวิธีที่พิมพ์ชื่อของพวกเขาคุณยังสามารถโยงกับอินเตอร์เฟซเหมือนเจ้าของภาษาPerson
person.setName("Alice").sayName().setName("Bob").sayName()
โดยวิธีการที่ฉันทำคำอธิบายประกอบเหล่านั้นใน JavaDoc กับข้อเสนอแนะของคุณ@return Fluent interface
- มันเป็นเรื่องทั่วไปและชัดเจนพอเมื่อมันใช้กับวิธีการใด ๆ ที่ทำreturn this
ในตอนท้ายของการดำเนินการและมันค่อนข้างชัดเจน ดังนั้นตัวสร้างจะทำส่วนต่อประสานที่คล่องแคล่ว
chainable setters
: D