ฉันเพิ่งลบคำตอบjavaของฉันในการตรวจสอบรหัสที่เริ่มต้นเช่นนี้:
private Person(PersonBuilder builder) {
หยุด. ธงแดง PersonBuilder จะสร้างบุคคล มันรู้เกี่ยวกับบุคคล คลาส Person ไม่ควรรู้อะไรเกี่ยวกับ PersonBuilder - เป็นเพียงประเภทที่ไม่เปลี่ยนรูป คุณสร้างคัปปลิ้งแบบวงกลมตรงนี้โดยที่ A ขึ้นอยู่กับ B ซึ่งขึ้นอยู่กับ A
บุคคลนั้นควร จำกัด พารามิเตอร์ของตน ลูกค้าที่เต็มใจสร้างบุคคลโดยไม่สร้างมันควรจะสามารถทำเช่นนั้นได้
ฉันถูกตบด้วย downvote และบอกว่า (อ้างถึง) การตั้งค่าสถานะสีแดงทำไม? การใช้งานที่นี่มีรูปร่างเดียวกับที่ Joshua Bloch แสดงในหนังสือ "Effective Java" ของเขา (รายการ # 2)
ดังนั้นดูเหมือนว่าวิธีที่ถูกต้องในการนำรูปแบบการสร้างมาใช้ใน Java คือการสร้างชนิดซ้อน (นี่ไม่ใช่สิ่งที่คำถามนี้เกี่ยวกับว่า) และจากนั้นสร้างผลิตภัณฑ์ (คลาสของวัตถุที่ถูกสร้างขึ้น ) ใช้การพึ่งพาผู้สร้างเช่นนี้
private StreetMap(Builder builder) { // Required parameters origin = builder.origin; destination = builder.destination; // Optional parameters waterColor = builder.waterColor; landColor = builder.landColor; highTrafficColor = builder.highTrafficColor; mediumTrafficColor = builder.mediumTrafficColor; lowTrafficColor = builder.lowTrafficColor; }
หน้า Wikipedia เดียวกันสำหรับรูปแบบ Builder เดียวกันนั้นมีการปรับใช้ (และยืดหยุ่นมากกว่า) สำหรับ C #:
//Represents a product created by the builder public class Car { public Car() { } public int Wheels { get; set; } public string Colour { get; set; } }
อย่างที่คุณเห็นผลิตภัณฑ์ที่นี่ไม่รู้อะไรเลยเกี่ยวกับBuilder
คลาสและสำหรับทุกสิ่งที่สนใจก็สามารถทำให้อินสแตนซ์ได้ด้วยการโทรคอนสตรัคเตอร์โดยตรงโรงงานนามธรรม ... หรือผู้สร้าง - เท่าที่ฉันเข้าใจผลิตภัณฑ์ในรูปแบบที่สร้างสรรค์ไม่จำเป็นต้องรู้อะไรเกี่ยวกับสิ่งที่สร้างมันขึ้นมา
ฉันได้รับการตอบโต้ข้อโต้แย้ง (ซึ่งเห็นได้ชัดว่าได้รับการปกป้องอย่างชัดแจ้งในหนังสือของ Bloch) ว่ารูปแบบการสร้างสามารถใช้ในการทำรูปแบบใหม่ที่จะมีตัวสร้างป่องที่มีข้อโต้แย้งหลายทางเลือก ดังนั้นแทนที่จะติดกับสิ่งที่ฉันคิดว่าฉันรู้ว่าฉันวิจัยบิตบนเว็บไซต์นี้และพบว่าเป็นฉันสงสัยว่าเรื่องนี้ไม่ได้ถือน้ำ
ดังนั้นการจัดการคืออะไร? ทำไมต้องคิดหาวิธีแก้ปัญหาที่เกินความคาดหมายเพื่อแก้ปัญหาที่ไม่ควรมีอยู่ในตอนแรก? หากเราถอด Joshua Bloch ออกจากแท่นเป็นเวลาหนึ่งนาทีเราจะคิดหาเหตุผลที่ดีและเป็นเหตุผลเดียวสำหรับการเชื่อมต่อคอนกรีตสองประเภทและเรียกมันว่าเป็นแนวปฏิบัติที่ดีที่สุดหรือไม่?
ทั้งหมดนี้เป็นการเขียนโปรแกรมการขนส่งสินค้าทางศาสนาให้ฉัน