1. وصف المشهد
في وضع الإنشاء ، من وضع طريقة المصنع ، وضع المصنع التجريدي ، إلى وضع البناء ، ثم إلى وضع النموذج الأولي ، فهمي هو أن طريقة إنشاء الكائنات يتم تحويلها تدريجياً من تنفيذ الترميز إلى معالجة كائنات الذاكرة.
على سبيل المثال ، أثناء إنشاء الفئة الفرعية/كائنات "جامع بيانات ملفات PDF" و "جامع بيانات ملفات Excel" ،
يتم تعريف كل فئة فرعية في وضع المصنع ويتم إنشاؤه بواسطة مصنع فئة المصنع (التجريدي) ، بحيث يمكن لكل فئة فرعية تحديد خصائصها في تعريف الفصل ؛
في وضع البناء ، يتم إنشاء كائنات فرعية مختلفة من خلال بناة فئات الخالق المختلفة ، ولم تعد الفئات الفرعية محددة في هذا الوقت ؛
في وضع النموذج الأولي ، يقوم المتصل بإنشاء كائنات تشبلية استنادًا إلى استنساخ الكائن الأصل ، ولا يقوم بإنشاء فئات للكائن الطفل أو فئات المصنع أو المصنع ذات الصلة.
تتوافق الأوضاع الثلاثة مع سيناريوهات مختلفة. عند التشغيل بالفعل ، يتم تحديد الوضع بشكل معقول وفقًا للسيناريو.
في وضع النموذج الأولي ، يتم إنشاء كائن جديد استنادًا إلى كائن النموذج الأولي ، بحيث يمكن استخدام قيم السمة المخصصة لكائن النموذج الأولي مباشرة في الكائن الجديد ، مما يلغي الواجبات المتكررة ؛
على سبيل المثال ، يمكن إكمال عمل التهيئة الشائعة لمجمع بيانات الأدوات في كائن النموذج الأولي ، والذي يمكن بعد ذلك استنساخ كائن جامع بيانات ملف PDF وكائن جمع بيانات ملف Excel ، والتوسيع اللاحق لخصائص الكائن ، مما يزيل عمل التهيئة للسمات العامة ؛
يتم الانتهاء من عملية الاستنساخ في الذاكرة. نظرًا لأن قيمة السمة لنوع الكائن يتم تخزينها كمرجع ، يتم تقسيم الاستنساخ إلى الاستنساخ الضحل والاستنساخ العميق ، ويتحقق الاستنساخ العميق من خلال الواجهة التسلسلية.
2. عينة رمز
النموذج الأولي:
package lums.designpatterndemo.prototypedemo ؛ import java.io.bytearrayinputstream ؛ import java.io.bytearrayoutputstream ؛ import java.io.ioException clonable ، serializable {private string filepath = "file path" ؛ سلسلة private aperatdata = "محتوى الملف" ؛ // string public getFilePath () {return this.filePath ؛ } public void setFilePath (String filepath) {this.filePath = filePath ؛ } السلسلة العامة getEquipmentData () {return this.equipmentData ؛ } public void setequipmentData (String EquipmentData) {this.equipmentData = EquiperData ؛ } // private Static Final Long SerialVersionuid = 1L ؛ خاص serializableObject OBJ ؛ // public SerializableObject getObj () {return obj ؛ } public void setObj (serializableObject obj) {this.obj = obj ؛ } // public equipmentDataCapture getEquipmentDataCapture () يلقي clonenotsupportedException {equimentDataCapture capture = (meadatdatacapture) super.clone () ؛ التقاط العودة. } // Public EquipmentDataCapture getPdffileCapture () يلقي clonenotsupportedException {// equimentDataCapture capture = (EquiperDataCapture) super.clone () ؛ // capture.setequipmentData ("محتوى ملف PDF") ؛ // الإرجاع التقاط ؛ //}. // capture.setequipmentData ("محتوى ملف excel") ؛ // الإرجاع التقاط ؛ //}/* نسخة عميقة*/ المعدات العامة dataCapture newEquipmentDataCapture () يلقي iOexception ، classnotfoundException {/* اكتب دفق ثنائي إلى الكائن الحالي*/ bytearrayoutputstream bos = جديد bytearrayoutputstream () ؛ ObjectOutputStream OOS = New ObjectOutputStream (BOS) ؛ OOS.WriteObject (هذا) ؛ /* اقرأ الكائن الجديد الذي تم إنشاؤه بواسطة الدفق الثنائي*/ bytearrayinputstream bis = جديد bytearrayinputstream (bos.tobytearray ()) ؛ ObjectInputStream OIS = New ObjectInputStream (BIS) ؛ الإرجاع (المعدات dataCapture) ois.readObject () ؛ }} class serializableObjectipes serializable {private Static Final Long SerialVersionuid = 1L ؛}جانب الاتصال:
حزمة lims.designpatterndemo.prototypedemo ؛ الطبقة العامة النموذجي {public static void main (string [] args) remslostupportedException {equiptDataCapture edc = new EquipmentDataCapture () ؛ capturedataCapture capture = null ؛ // capture = edc.getPdffileCapture () ؛ // capture = edc.getexcelfileCapture () ؛ capture = edc.getequipmentDataCapture () ؛ capture.setequipmentData ("محتوى ملف بيانات المعدات") ؛ سلسلة fileContent = capture.getequipmentData () ؛ system.out.println (fileContent) ؛ }}ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.