รุ่นต้นแบบ
รุ่นต้นแบบ (Prototype แบบ) จะใช้ในการสร้างวัตถุที่ซ้ำกันในขณะที่มั่นใจประสิทธิภาพ ประเภทของรูปแบบการออกแบบนี้เป็นของสร้างสกีซึ่งมีวิธีที่ดีที่สุดในการสร้างวัตถุ
รุ่นนี้เป็นอินเตอร์เฟซต้นแบบที่ใช้ในการสร้างโคลนของวัตถุในปัจจุบัน เมื่อค่าใช้จ่ายโดยตรงของการสร้างวัตถุมีขนาดใหญ่ค่อนข้างแล้วใช้รุ่นนี้ ยกตัวอย่างเช่นวัตถุที่จะต้องมีการสร้างขึ้นหลังจากที่ฐานข้อมูลคือการดำเนินการค่าใช้จ่าย เราสามารถแคชวัตถุในครั้งต่อไปขอให้กลับไปที่โคลนของเวลาที่จำเป็นในการปรับปรุงฐานข้อมูลในการสั่งซื้อเพื่อลดสายฐานข้อมูล
การแนะนำ
เจตนา: ต้นแบบที่ใช้ในการสร้างอินสแตนซ์ประเภทวัตถุที่ระบุและสร้างวัตถุใหม่โดยการคัดลอกต้นแบบ
เป็นหลักในการแก้ปัญหา: การสร้างและลบต้นแบบที่รันไทม์
เมื่อจะใช้: 1, เมื่อระบบควรจะเป็นอิสระจากการสร้างผลิตภัณฑ์ขององค์ประกอบและการเป็นตัวแทน2 เมื่อตัวอย่างของการเรียนคือการระบุในเวลาทำงานตัวอย่างเช่นโดยการโหลดแบบไดนามิก 3 ในการสั่งซื้อเพื่อหลีกเลี่ยงการสร้างลำดับชั้นแบบขนานและลำดับชั้นของสินค้าเมื่อระดับโรงงาน 4 เมื่อตัวอย่างของการเรียนสามารถมีแตกต่างกันไม่กี่ของรัฐในครั้งเดียว สร้างจำนวนที่สอดคล้องกันของต้นแบบและโคลนพวกเขาอาจจะสะดวกกว่าคู่มือการใช้งานในแต่ละครั้งที่มีสถานะที่เหมาะสมของอินสแตนซ์ของชั้น
วิธีการแก้ปัญหา: การใช้วัตถุต้นแบบที่มีอยู่ได้อย่างรวดเร็วและผลิตวัตถุต้นแบบตามตัวอย่าง
คีย์รหัส: 1 เพื่อให้เกิดการดำเนินการโคลน, JAVA มรดก Cloneable เขียนโคลน () สามารถนำมาใช้ในระดับ MemberwiseClone .NET วัตถุ () วิธีการเพื่อให้บรรลุเป้าหมายของตื้นคัดลอกหรืออนุกรมวิธีการเพื่อให้บรรลุสำเนาลึก2, รุ่นต้นแบบเหมือนกันสำหรับการมีเพศสัมพันธ์ระหว่างผู้ใช้และประเภทที่เฉพาะเจาะจง (ชนิดตัวแปร) การแยกระหว่างวัตถุชั้นก็ยังต้องว่าสิ่งเหล่านี้ "ชนิดตัวแปร" มีอินเตอร์เฟซที่มีเสถียรภาพ
ตัวอย่างการใช้งาน: 1, การแบ่งเซลล์2, JAVA ในโคลนวัตถุ () วิธีการ
ข้อดี: 1, ปรับปรุงประสิทธิภาพการทำงาน2 หนีคอนสตรัค จำกัด
ข้อเสีย: 1 กับวิธีการโคลนต้องคำนึงถึงระดับของการทำงานซึ่งคลาสใหม่ไม่ยาก แต่สำหรับชั้นเรียนที่มีอยู่อาจจะไม่ง่ายมากโดยเฉพาะเมื่อมีการอ้างอิงระดับไม่สนับสนุนอนุกรมของวัตถุทางอ้อม หรือโครงสร้างวงจรที่มีการอ้างอิงถึงเวลา2 ต้องใช้อินเตอร์เฟซ Cloneable 3 หลีกเลี่ยงการคอนสตรัค จำกัด
สถานการณ์การใช้งาน: 1, สถานการณ์เพิ่มประสิทธิภาพของทรัพยากร2, การเริ่มต้นเรียนต้องแยกแยะทรัพยากรจำนวนมากรวมทั้งข้อมูลทรัพยากรทรัพยากรฮาร์ดแวร์ 3 ประสิทธิภาพการทำงานและความปลอดภัยความต้องการของสถานที่เกิดเหตุ 4 โดยการสร้างวัตถุใหม่ต้องเตรียมหรือข้อมูลที่น่าเบื่อมากเข้าถึงคุณสามารถใช้รูปแบบเดิม 5 ซึ่งเป็นส่วนใหญ่ของวัตถุแก้ไขโดยฉาก 6 วัตถุต้องการเพื่อให้สามารถเข้าถึงวัตถุอื่น ๆ และแต่ละโทรอาจต้องปรับเปลี่ยนค่าของมันพิจารณาโดยใช้แบบจำลองต้นแบบสำหรับหลายสำเนาของวัตถุที่ใช้โดยผู 7 ในโครงการที่เกิดขึ้นจริงรุ่นต้นแบบที่ไม่ค่อยเกิดขึ้นเพียงอย่างเดียวและโรงงานรูปแบบวิธีปกติจะปรากฏขึ้นร่วมกันสร้างวิธีการโคลนวัตถุและให้แล้วโทรโดยวิธีโรงงาน และโมเดลต้นแบบ Java ได้รับการจดทะเบียนเป็นทั้งหนึ่งก็สามารถนำมาใช้อย่างง่ายดายในการใช้
หมายเหตุ: การกับการเรียนโดยอินสแตนซ์ที่จะสร้างวัตถุใหม่ที่แตกต่างกันคือรุ่นต้นแบบคือการสร้างวัตถุใหม่โดยการคัดลอกวัตถุที่มีอยู่สำเนาตื้นตระหนัก Cloneable เขียนสำเนาลึกอ่านสตรีมไบนารีโดยการใช้ Serializable
การสำนึก
เราจะสร้างรูปร่างระดับนามธรรมและขยายชั้นเรียนรูปร่างนิติบุคคลขั้นตอนต่อไปคือการกำหนดShapeCache ชั้นรูปร่างของวัตถุดังกล่าวถูกเก็บไว้ในHashtable ในและในเวลาของการร้องขอเพื่อกลับไปยังโคลนของพวกเขา
PrototypPatternDemo เรียนสาธิตของเราโดยใช้ระดับShapeCacheที่จะได้รับวัตถุรูปร่าง
ขั้นตอนที่ 1
สร้างระดับนามธรรมที่ดำเนินClonableอินเตอร์เฟซ
Shape.java
ประชาชนรูปร่างระดับนามธรรมดำเนิน Cloneable { ID String เอกชน ชนิดสตริงคุ้มครอง นามธรรมเป็นโมฆะวาด (); String สาธารณะ getType () { ส่งกลับชนิด; } String สาธารณะ getId () { กลับ ID; } โมฆะสาธารณะ setId (String ID) { this.id id =; } โคลนวัตถุสาธารณะ () { วัตถุโคลน = null; try { โคลน = super.clone (); } catch (CloneNotSupportedException E) { e.printStackTrace (); } กลับโคลน; } }
ขั้นตอนที่ 2
สร้างคลาสนิติบุคคลดังกล่าวข้างต้นขยายระดับนามธรรม
Rectangle.java
เรียนสาธารณะขยายสี่เหลี่ยมผืนผ้ารูปร่าง { ประชาชนสี่เหลี่ยมผืนผ้า () { type = "สี่เหลี่ยมผืนผ้า"; } @Override วาดโมฆะสาธารณะ () { System.out.println ( "ภายในสี่เหลี่ยมผืนผ้า :: วาด () วิธีการ."); } }
Square.java
เรียนสาธารณะสแควร์ขยายรูปร่าง { ประชาชนสแควร์ () { type = "สแควร์"; } @Override วาดโมฆะสาธารณะ () { System.out.println ( "สแควร์ภายใน :: วาด () วิธีการ."); } }
Circle.java
วงกลมชั้นสาธารณะขยายรูปร่าง { สาธารณะวงกลม () { type = "วงกลม"; } @Override วาดโมฆะสาธารณะ () { System.out.println ( "ภายในวงกลม :: วาด () วิธีการ."); } }
ขั้นตอนที่ 3
สร้างชั้นได้รับการเรียนนิติบุคคลจากฐานข้อมูลและเก็บไว้ในHashtableใน
ShapeCache.java
นำเข้า java.util.Hashtable; ShapeCache คลาสที่สาธารณะ { ส่วนตัวคง Hashtable <String, รูปร่าง> shapeMap = ใหม่ Hashtable <String, รูปร่าง> (); ประชาชนคงรูปร่าง getShape (String shapeId) { รูปร่าง cachedShape = shapeMap.get (shapeId); ผลตอบแทน (รูปร่าง) cachedShape.clone (); } // สำหรับแต่ละคำสั่งรูปร่างวิ่งฐานข้อมูลและสร้างรูปร่าง // shapeMap.put (shapeKey รูปร่าง); // ตัวอย่างเช่นเราต้องการที่จะเพิ่มรูปทรงสามประชาชนเป็นโมฆะคง loadCache () { วงกลมวงกลมวงกลม = ใหม่ (); circle.setId ( "1"); shapeMap.put (circle.getId () วงกลม); ตารางสแควร์สแควร์ = ใหม่ (); square.setId ( "2"); shapeMap.put (square.getId () ตาราง); สี่เหลี่ยมผืนผ้าสี่เหลี่ยมผืนผ้า = สี่เหลี่ยมผืนผ้าใหม่ (); rectangle.setId ( "3"); shapeMap.put (rectangle.getId () สี่เหลี่ยมผืนผ้า); } }
ขั้นตอนที่ 4
PrototypePatternDemoใช้คลาสShapeCacheที่จะได้รับรูปของโคลนที่ถูกเก็บไว้ในHashtable
PrototypePatternDemo.java
เรียนสาธารณะ PrototypePatternDemo { ประชาชนเป็นโมฆะคง main (String args []) { ShapeCache.loadCache (); รูปร่าง clonedShape = (รูปร่าง) ShapeCache.getShape ( "1"); System.out.println ( "รูปร่าง:" + clonedShape.getType ()); รูปร่าง clonedShape2 = (รูปร่าง) ShapeCache.getShape ( "2"); System.out.println ( "รูปร่าง:" + clonedShape2.getType ()); รูปร่าง clonedShape3 = (รูปร่าง) ShapeCache.getShape ( "3"); System.out.println ( "รูปร่าง:" + clonedShape3.getType ()); } }
ขั้นตอนที่ 5
ตรวจสอบการส่งออก
รูปร่าง: วงกลม รูปร่าง: สแควร์ รูปร่าง: สี่เหลี่ยมผืนผ้า