คำจำกัดความ: แยกการสร้างวัตถุที่ซับซ้อนออกจากการเป็นตัวแทนเพื่อให้กระบวนการก่อสร้างเดียวกันสามารถสร้างการเป็นตัวแทนที่แตกต่างกัน
ประเภท: สร้างแผนภาพคลาสรูปแบบคลาส:
สี่องค์ประกอบ
การใช้รหัส
คลาสนามธรรมของผลิตภัณฑ์:
ตัวสร้างแพ็คเกจ; นำเข้า java.util.arraylist; บทคัดย่อระดับสาธารณะ AbstractProduct {// บันทึกคำสั่งการดำเนินการ arrayList ส่วนตัว <String> part = new ArrayList <String> (); บทคัดย่อสาธารณะเป็นโมฆะ Dosomething (); โมฆะนามธรรมสาธารณะ Dootherthing (); // final, subclasses ไม่สามารถแทนที่ void executive สุดท้าย () {สำหรับ (int i = 0; i <this.part.size (); i ++) {string actionName = this.part.get (i); if (actionName.equals ("dosomething")) {this.dosomething (); } อื่นถ้า (actionName.equals ("doothing")) {this.doherthing (); }}} // final, subclasses ไม่สามารถแทนที่โมฆะสาธารณะสุดท้าย setPart (ArrayList <String> ส่วน) {this.part = ส่วน; -หมวดหมู่การใช้งานผลิตภัณฑ์:
ตัวสร้างแพ็คเกจ; ผลิตภัณฑ์ระดับสาธารณะขยาย AbstractProduct {// subclass คำอธิบายเฉพาะขั้นตอนโมฆะสาธารณะ dosomething () {system.out.println ("จะทำอะไรบางอย่าง ... "); } โมฆะสาธารณะ dootherthing () {system.out.println ("มีบางสิ่งที่ทำไปแล้วทุกสิ่งจะทำ ... "); -ผู้สร้างคลาสนามธรรม:
ตัวสร้างแพ็คเกจ; นำเข้า java.util.arraylist; ตัวสร้างคลาสนามธรรมสาธารณะ {// ตั้งส่วนต่าง ๆ ของผลิตภัณฑ์เพื่อให้ได้ผลิตภัณฑ์ที่แตกต่างกันเป็นโมฆะ setpart นามธรรมสาธารณะ (ArrayList <String> ส่วน); // สร้างผลิตภัณฑ์ Public Public Product Product BuildProduct (); -ระดับการใช้งาน Builder:
ตัวสร้างแพ็คเกจ; นำเข้า java.util.arraylist; คอนกรีตคลาสสาธารณะขยายตัวสร้าง {ผลิตภัณฑ์ผลิตภัณฑ์ส่วนตัว = ผลิตภัณฑ์ใหม่ (); Public Void SetPart (ArrayList <String> ส่วน) {this.product.setPart (ส่วน); } ผลิตภัณฑ์สาธารณะ buildProduct () {return this.product; -หมวดผู้อำนวยการ:
ตัวสร้างแพ็คเกจ; นำเข้า java.util.arraylist; // การบรรจุใหม่ลำดับการผลิตของผลิตภัณฑ์ที่แตกต่างกันและบล็อกรายละเอียดของผู้อำนวยการระดับสาธารณะระดับสูง {ส่วนตัว ArrayList <String> ส่วน = new ArrayList <String> (); ตัวสร้างส่วนตัวผู้สร้าง = ใหม่ ConcreteProduct (); ผลิตภัณฑ์สาธารณะ getaproduct () {this.part.clear (); this.part.add ("Dosomething"); this.part.add ("dootherthing"); builder.setPart (ส่วน); return builder.buildproduct (); -ลูกค้า:
ตัวสร้างแพ็คเกจ; ไคลเอนต์ระดับสาธารณะ {โมฆะสาธารณะคงที่หลัก (สตริง [] args) {ผู้อำนวยการผู้อำนวยการ = ผู้อำนวยการใหม่ (); System.out.println ("จะสร้าง 10 ผลิตภัณฑ์"); สำหรับ (int i = 1; i <11; i ++) {system.out.println ("เธรด" + i + "ผลิตภัณฑ์"); Director.getAproduct (). Executive (); System.out.println (); -
ข้อดีของโมเดลผู้สร้าง
ก่อนอื่นโมเดลผู้สร้างมีการห่อหุ้มที่ดีมาก การใช้โมเดลตัวสร้างสามารถห่อหุ้มการเปลี่ยนแปลงได้อย่างมีประสิทธิภาพ ในสถานการณ์ของการใช้โมเดลผู้สร้างหมวดหมู่ผลิตภัณฑ์ทั่วไปและหมวดหมู่ผู้สร้างค่อนข้างเสถียร ดังนั้นการห่อหุ้มตรรกะทางธุรกิจหลักในหมวดหมู่ผู้อำนวยการสามารถบรรลุเสถียรภาพที่ดีขึ้นโดยรวม
ประการที่สองโหมดผู้สร้างขยายง่าย หากมีข้อกำหนดใหม่สามารถทำได้โดยการใช้คลาส Builder ใหม่ โดยทั่วไปไม่จำเป็นต้องแก้ไขรหัสที่ได้รับการทดสอบและผ่านมาก่อนดังนั้นจะไม่มีความเสี่ยงต่อฟังก์ชั่นดั้งเดิม
ความแตกต่างระหว่างโมเดลผู้สร้างและแบบจำลองโรงงาน
เราจะเห็นได้ว่าโมเดลผู้สร้างนั้นคล้ายกับโมเดลโรงงานมาก โดยรวมแล้วโมเดลผู้สร้างมีบทบาท "ผู้กำกับ" มากกว่าหนึ่งบทบาทมากกว่าโมเดลโรงงาน ในแผนภาพคลาสรูปแบบของผู้สร้างหากคลาสผู้อำนวยการได้รับการยกย่องว่าเป็นไคลเอนต์สุดท้ายส่วนที่เหลือในไดอะแกรมถือได้ว่าเป็นรูปแบบของโรงงานอย่างง่าย
เมื่อเทียบกับแบบจำลองโรงงานโดยทั่วไปโมเดลตัวสร้างจะใช้เพื่อสร้างวัตถุที่ซับซ้อนมากขึ้น เนื่องจากกระบวนการสร้างวัตถุมีความซับซ้อนมากขึ้นกระบวนการสร้างวัตถุจึงไม่ขึ้นอยู่กับกระบวนการสร้างวัตถุเพื่อสร้างคลาสใหม่ - คลาสผู้กำกับ กล่าวอีกนัยหนึ่งโมเดลโรงงานห่อหุ้มกระบวนการสร้างทั้งหมดของวัตถุในคลาสโรงงานและคลาสโรงงานให้ผลิตภัณฑ์ขั้นสุดท้ายแก่ลูกค้า ในขณะที่อยู่ในโมเดลผู้สร้างโดยทั่วไปคลาสผู้สร้างจะให้การสร้างส่วนประกอบแต่ละรายการในชั้นเรียนเท่านั้นและส่งมอบกระบวนการก่อสร้างที่เฉพาะเจาะจงไปยังชั้นผู้อำนวยการ คลาสผู้อำนวยการรับผิดชอบในการจัดตั้งแต่ละองค์ประกอบเป็นผลิตภัณฑ์ตามกฎเฉพาะจากนั้นส่งมอบผลิตภัณฑ์ที่เกิดขึ้นให้กับลูกค้า
สรุป
โมเดลผู้สร้างนั้นคล้ายกับโมเดลโรงงาน พวกเขาเป็นทั้งโมเดลผู้สร้างและสถานการณ์ที่ใช้งานได้ก็คล้ายกันมาก โดยทั่วไปหากการก่อสร้างผลิตภัณฑ์มีความซับซ้อนโปรดใช้แบบจำลองโรงงาน หากการก่อสร้างผลิตภัณฑ์มีความซับซ้อนมากขึ้นโปรดใช้โมเดลผู้สร้าง