คำจำกัดความ: ใช้อินสแตนซ์ต้นแบบเพื่อระบุประเภทของวัตถุที่จะสร้างและสร้างวัตถุใหม่โดยการคัดลอกต้นแบบเหล่านี้
ประเภท: สร้างรูปแบบคลาส
แผนภาพชั้นเรียน:
รูปแบบต้นแบบส่วนใหญ่ใช้สำหรับการคัดลอกวัตถุและแกนกลางของมันคือต้นแบบต้นแบบต้นแบบในแผนภาพคลาส คลาสต้นแบบต้องปฏิบัติตามสองเงื่อนไขดังต่อไปนี้:
ใช้อินเทอร์เฟซ cloneable มีอินเทอร์เฟซ cloneable ในภาษา Java ซึ่งมีฟังก์ชั่นเดียวเท่านั้นซึ่งคือการแจ้งเครื่องเสมือนจริงที่รันไทม์ที่สามารถใช้วิธีการโคลนในคลาสที่ใช้อินเทอร์เฟซนี้ได้อย่างปลอดภัย ในเครื่องเสมือน Java เฉพาะคลาสที่ใช้อินเทอร์เฟซนี้เท่านั้นที่สามารถคัดลอกได้มิฉะนั้น clonenotsupportedException จะถูกโยนลงที่รันไทม์
เขียนวิธีโคลนใหม่ในคลาสวัตถุ ใน Java คลาสแม่ของคลาสทั้งหมดเป็นคลาสวัตถุ มีวิธีการโคลนในคลาสวัตถุซึ่งส่งคืนสำเนาของวัตถุ แต่ขอบเขตของมันเป็นประเภทที่ได้รับการป้องกันและไม่สามารถเรียกคลาสทั่วไปได้ ดังนั้นคลาสต้นแบบจึงจำเป็นต้องปรับเปลี่ยนขอบเขตของวิธีการโคลนเป็นประเภทสาธารณะ
โหมดต้นแบบเป็นโหมดที่ค่อนข้างง่ายและเข้าใจง่ายมาก ในการใช้อินเทอร์เฟซและเขียนวิธีใหม่โหมดต้นแบบจะเสร็จสมบูรณ์ ในการใช้งานจริงรูปแบบต้นแบบไม่ค่อยปรากฏเพียงลำพัง มันมักจะผสมกับรูปแบบอื่น ๆ และต้นแบบต้นแบบของคลาสต้นแบบก็มักจะถูกแทนที่ด้วยคลาสนามธรรม
รหัสการใช้งาน:
แพ็คเกจต้นแบบ คลาสสาธารณะ Prototypeclass ใช้ cloneable {@Override protected prototypeclass clone () {prototypeclass prototypeclass = null; ลอง {prototypeclass = (prototypeclass) super.clone (); } catch (clonenotsupportedexception e) {// todo บล็อก catch ที่สร้างโดยอัตโนมัติ e.printstacktrace (); } return prototypeclass; -ลูกค้า:
แพ็คเกจต้นแบบ ไคลเอนต์ระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {prototypeclass obj1 = ใหม่ prototypeclass (); prototypeclass obj2 = obj1.clone (); System.out.println (OBJ1); System.out.println (OBJ2); - ข้อดีของโหมดต้นแบบและสถานการณ์ที่เกี่ยวข้อง
การสร้างวัตถุโดยใช้โหมดต้นแบบนั้นดีกว่าใหม่โดยตรงเนื่องจากวิธีการโคลนของคลาสวัตถุเป็นวิธีการในท้องถิ่นที่จัดการกับสตรีมไบนารีโดยตรงในหน่วยความจำโดยเฉพาะอย่างยิ่งเมื่อคัดลอกวัตถุขนาดใหญ่ความแตกต่างของประสิทธิภาพนั้นชัดเจนมาก
ประโยชน์อีกประการหนึ่งของการใช้รูปแบบต้นแบบคือการทำให้การสร้างวัตถุง่ายขึ้นทำให้การสร้างวัตถุเป็นเรื่องง่ายเหมือนการคัดลอกเมื่อเราแก้ไขเอกสาร
เนื่องจากข้อดีข้างต้นคุณสามารถพิจารณาใช้รูปแบบต้นแบบเมื่อคุณต้องการสร้างวัตถุที่คล้ายกันซ้ำ ๆ ตัวอย่างเช่นคุณต้องสร้างวัตถุในร่างกายลูป หากกระบวนการสร้างวัตถุมีความซับซ้อนมากขึ้นหรือจำนวนรอบมีจำนวนมากการใช้โหมดต้นแบบไม่เพียง แต่ทำให้กระบวนการสร้างง่ายขึ้น แต่ยังปรับปรุงประสิทธิภาพโดยรวมของระบบได้มาก
ต้นแบบระดับสาธารณะใช้ cloneable {รายการ ArrayList ส่วนตัว = new ArrayList (); Public Prototype clone () {ต้นแบบต้นแบบ = null; ลอง {prototype = (prototype) super.clone (); prototype.list = (arraylist) this.list.clone (); } catch (clonenotsupportedException e) {e.printStackTrace (); } ส่งคืนต้นแบบ; -หมายเหตุเกี่ยวกับโหมดต้นแบบ:
เนื่องจาก ArrayList ไม่ใช่ประเภทพื้นฐานรายการตัวแปรสมาชิกจะไม่ถูกคัดลอกและเราจำเป็นต้องใช้สำเนาลึกด้วยตัวเอง โชคดีที่คลาสคอนเทนเนอร์ส่วนใหญ่จัดทำโดย Java ใช้อินเทอร์เฟซ cloneable ดังนั้นจึงไม่ยากโดยเฉพาะอย่างยิ่งที่จะคัดลอกลึก
PS: ในการคัดลอกและปัญหาการคัดลอกตื้นลึกสำเนาจะเกิดขึ้นรวมถึงประเภทพื้นฐานใน 8 Java และประเภทการห่อหุ้มของพวกเขาและยังมีประเภทสตริง ส่วนที่เหลือเป็นสำเนาตื้น