A StringBuilder
คล้ายกับ Builder Pattern แต่ไม่ได้แชร์อะไรมากกับคำอธิบาย GoF ของรูปแบบการออกแบบนี้ จุดเริ่มต้นของรูปแบบการออกแบบคือ
แยกการก่อสร้างวัตถุที่ซับซ้อนออกจากการเป็นตัวแทนเพื่อให้กระบวนการก่อสร้างเดียวกันสามารถสร้างการรับรองที่แตกต่างกัน
- จากรูปแบบการออกแบบโดย Gamma, Helm, Johnson, Vlissides
(หมายเหตุ:“ ซับซ้อน” โดยพื้นฐานแล้วหมายถึง“ ประกอบด้วยหลายส่วน” ไม่จำเป็นต้อง“ ซับซ้อน” หรือ“ ยาก”)
"การเป็นตัวแทนที่แตกต่าง" เป็นกุญแจสำคัญที่นี่ เช่นสมมติว่ากระบวนการก่อสร้างนี้:
interface ArticleBuilder {
void addTitle(String title);
void addParagraph(String paragraph);
}
void createArticle(ArticeBuilder articleBuilder) {
articleBuilder.addTitle("Is String Builder an application of ...");
articleBuilder.addParagraph("Is the Builder Pattern restricted...");
articleBuilder.addParagraph("The StringBuilder class ...");
}
เราอาจท้ายด้วย a HtmlDocument
หรือ a TexDocument
หรือMarkdownDocument
ขึ้นอยู่กับการใช้งานที่เป็นรูปธรรม:
class HtmlDocumentBuilder implements ArticleBuilder {
...
HtmlDocument getResult();
}
HtmlDocumentBuilder b = new HtmlDocumentBuilder();
createArticle(b);
HtmlDocument dom = b.getResult();
ดังนั้นจุดกลางหนึ่งในรูปแบบ Builder เป็นความแตกต่าง หนังสือลวดลายการออกแบบเปรียบเทียบรูปแบบนี้กับบทคัดย่อจากโรงงาน:
Abstract Factory นั้นคล้ายกับ Builder ซึ่งอาจสร้างวัตถุที่ซับซ้อนได้เช่นกัน ความแตกต่างหลักคือรูปแบบของตัวสร้างจะเน้นไปที่การสร้างวัตถุที่มีความซับซ้อนทีละขั้นตอน [... ] Builder ส่งคืนผลิตภัณฑ์เป็นขั้นตอนสุดท้าย แต่เท่าที่โรงงาน Abstract เกี่ยวข้องผลิตภัณฑ์จะถูกส่งคืนทันที
- จากรูปแบบการออกแบบโดย Gamma, Helm, Johnson, Vlissides
ลักษณะทีละขั้นตอนนี้กลายเป็นรูปแบบที่ได้รับความนิยมมากขึ้นของรูปแบบของตัวสร้างดังนั้นในสำนวนทั่วไปรูปแบบของตัวสร้างจึงเป็นที่เข้าใจดังนี้:
แบ่งโครงสร้างของวัตถุออกเป็นหลายขั้นตอน สิ่งนี้ช่วยให้เราสามารถใช้อาร์กิวเมนต์ที่มีชื่อหรือพารามิเตอร์ทางเลือกแม้ในภาษาที่ไม่สนับสนุนคุณสมบัติเหล่านี้
Wikipedia กำหนดรูปแบบเช่นนี้:
รูปแบบตัวสร้างเป็นรูปแบบการออกแบบซอฟต์แวร์การสร้างวัตถุ ซึ่งแตกต่างจากรูปแบบโรงงานนามธรรมและรูปแบบการโรงงานที่มีความตั้งใจที่จะเปิดใช้งานหลายรูปแบบ, ความตั้งใจในการสร้างรูปแบบคือการหาวิธีการแก้เหลื่อมคอนสตรัคต่อต้านรูปแบบ[อ้างจำเป็น] [ ... ]
รูปแบบการสร้างมีประโยชน์อื่น มันสามารถใช้สำหรับวัตถุที่มีข้อมูลแบน (รหัส html, แบบสอบถาม SQL, ใบรับรอง X.509 ... ) กล่าวคือข้อมูลที่ไม่สามารถแก้ไขได้ง่าย ข้อมูลประเภทนี้ไม่สามารถแก้ไขทีละขั้นตอนและต้องแก้ไขในครั้งเดียว วิธีที่ดีที่สุดในการสร้างวัตถุเช่นนี้คือการใช้คลาสผู้สร้าง [ต้องการอ้างอิง]
- จากBuilder PatternบนWikipediaโดยผู้มีส่วนร่วมหลายคน
ดังนั้นอย่างที่เราเห็นไม่มีความเข้าใจร่วมกันอย่างแท้จริงของรูปแบบที่ชื่อนี้อ้างถึงและในบางจุดคำจำกัดความที่แตกต่างกันแม้จะขัดแย้งกัน (เช่นเกี่ยวกับความเกี่ยวข้องของความหลากหลายของผู้สร้าง)
คุณสมบัติทั่วไปเพียงอย่างเดียวของStringBuilder
พร้อมกับการตีความที่หลากหลายของรูปแบบคือผลิตภัณฑ์ถูกสร้างทีละขั้นตอนมากกว่าในครั้งเดียว ไม่เป็นไปตามการอ่านอย่างเข้มงวดเกี่ยวกับคำจำกัดความของ GoF ของรูปแบบการออกแบบ แต่โปรดทราบว่ารูปแบบการออกแบบนั้นเป็นแนวคิดที่มีความอ่อนไหวซึ่งหมายถึงการอำนวยความสะดวกในการสื่อสาร ฉันจะยังคงเรียกStringBuilder
ตัวอย่างของรูปแบบของตัวสร้างต่อไปแม้ว่าจะเป็นรูปแบบที่ผิดปกติ - เหตุผลหลักสำหรับโครงสร้างนั้นใน Java คือการเรียงต่อกันของนักแสดงต่อหน้าสตริงที่ไม่เปลี่ยนรูป แต่ไม่ใช่การออกแบบเชิงวัตถุที่น่าสนใจ