1. คำอธิบายฉาก
ในโหมดการสร้างจากโหมดวิธีการโรงงานโหมดนามธรรมโรงงานไปจนถึงโหมดผู้สร้างและจากนั้นไปยังโหมดต้นแบบความเข้าใจของฉันคือวิธีการสร้างวัตถุจะค่อยๆเปลี่ยนจากการใช้การเขียนโค้ดไปยังการประมวลผลวัตถุหน่วยความจำ
ตัวอย่างเช่นในระหว่างการสร้าง subclass/objects ของ "PDF File Data Collector" และ "Excel File Data Collector"
แต่ละคลาสย่อยถูกกำหนดไว้ในโหมดโรงงานและสร้างขึ้นโดยโรงงานคลาส (นามธรรม) โรงงานดังนั้นแต่ละคลาสย่อยสามารถกำหนดคุณสมบัติที่เกี่ยวข้องในนิยามคลาส;
ในโหมดผู้สร้างวัตถุย่อยที่แตกต่างกันถูกสร้างขึ้นผ่านผู้สร้างคลาสผู้สร้างที่แตกต่างกันและคลาสย่อยจะไม่ถูกกำหนดอีกต่อไปในเวลานี้;
ในโหมดต้นแบบผู้โทรสร้างวัตถุลูกทั้งหมดตามการโคลนนิ่งวัตถุหลักและไม่ได้สร้างคลาสสำหรับวัตถุเด็กหรือคลาสโรงงานหรือคลาสที่เกี่ยวข้อง
ทั้งสามโหมดสอดคล้องกับสถานการณ์ที่แตกต่างกัน เมื่อใช้งานจริงโหมดจะถูกเลือกอย่างสมเหตุสมผลตามสถานการณ์
ในโหมดต้นแบบวัตถุใหม่ถูกสร้างขึ้นตามวัตถุต้นแบบดังนั้นค่าแอตทริบิวต์ที่กำหนดให้กับวัตถุต้นแบบสามารถใช้โดยตรงในวัตถุใหม่กำจัดการกำหนดซ้ำ
ตัวอย่างเช่นการเริ่มต้นงานทั่วไปของตัวรวบรวมข้อมูลเครื่องมือสามารถเสร็จสิ้นในวัตถุต้นแบบซึ่งสามารถโคลนวัตถุไฟล์รวบรวมข้อมูลไฟล์ PDF และวัตถุรวบรวมข้อมูลไฟล์ Excel และการขยายตัวของคุณสมบัติวัตถุทั้งสองจะถูกกำจัด
การดำเนินการโคลนเสร็จสมบูรณ์ในหน่วยความจำ เนื่องจากค่าแอตทริบิวต์ของประเภทวัตถุถูกเก็บไว้เป็นข้อมูลอ้างอิงการโคลนนิ่งจะถูกแบ่งออกเป็นโคลนตื้นและการโคลนนิ่งลึกและการโคลนนิ่งลึกจะเกิดขึ้นได้ผ่านอินเตอร์เฟส serializable
2. รหัสตัวอย่าง
ต้นแบบ:
Package Lims.designpatterndemo.prototypedemo; นำเข้า java.io.bytearrayinputstream นำเข้า java.io.bytearrayutputstream นำเข้า java.io.ioException; นำเข้า Java.io.ObjectInputStream; cloneable, serializable {private string filepath = "เส้นทางไฟล์"; String Private String EquipmentData = "เนื้อหาไฟล์"; // สตริงสาธารณะ getFilePath () {return this.filepath; } โมฆะสาธารณะ setFilePath (String filePath) {this.filePath = filePath; } สตริงสาธารณะ getEquipmentData () {return this.equipmentData; } โมฆะสาธารณะ setEquipmentData (String EquipmentData) {this.equipmentData = EquipmentData; } // private Static Final Long Long SerialVersionUid = 1L; serializableObject ส่วนตัว OBJ; // public serializableObject getobj () {return obj; } โมฆะสาธารณะ setObj (serializableObject obj) {this.obj = obj; } // public equipmentDatacapture getEquipmentDatacapture () พ่น clonenotsupportedException {EquipmentDatacapture Capture = (EquipmentDatacapture) super.clone (); การจับกลับมา; } // public EquipmentDatacapture getpdffileCapture () พ่น clonenotsupportedexception {// equipmentDatacapture capture = (EquipmentDatacapture) super.clone (); // Capture.SetequipmentData ("เนื้อหาไฟล์ pdf"); // return capture; //} // public EquipmentDatacapture getExCelfileCapture () พ่น clonenotsupportedException {// equipmentDatacapture capture = (EquipmentDatacapture) super.clone (); // Capture.SetequipmentData ("เนื้อหาไฟล์ excel"); // return capture; //}/* สำเนาลึก*/ อุปกรณ์สาธารณะ datacapture newEquipmentDataCapture () พ่น IOException, classnotFoundException {/* เขียนสตรีมไบนารีลงในวัตถุปัจจุบัน*/ byteArrayOutputStream BOS = ใหม่ ByTeArrayOutputStream (); ObjectOutputStream OOS = ใหม่ ObjectOutputStream (BOS); oos.writeObject (นี่); /* อ่านวัตถุใหม่ที่สร้างขึ้นโดยสตรีมไบนารี*/ byteArrayInputStream bis = byTearrayInputStream ใหม่ (bos.tobyteArray ()); ObjectInputStream OIS = ใหม่ ObjectInputStream (bis); return (EquipmentDatacapture) ois.readObject (); }} คลาส serializeableObject ใช้ serializable {ส่วนตัวคงที่สุดท้าย Long SerialVersionUid = 1l;}ด้านโทร:
แพ็คเกจ Lims.designpatterndemo.prototypedemo; Proval Class Prototypedemo {โมฆะสาธารณะคงที่หลัก (สตริง [] args) โยน clonenotsupportedException {EquipmentDatacapture EDC = EquipmentDatacapture ใหม่ (); EquipmentDatacapture Capture = null; // capture = edc.getPdffileCapture (); // capture = edc.getExcelfileCapture (); Capture = edc.getEquipmentDatacapture (); Capture.SetequipmentData ("เนื้อหาไฟล์ข้อมูลอุปกรณ์"); สตริง fileContent = capture.getEquipmentData (); System.out.println (fileContent); -ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น