التعريف: استخدم مثيلات النموذج الأولي لتحديد نوع الكائنات المراد إنشاؤها ، وإنشاء كائنات جديدة عن طريق نسخ هذه النماذج الأولية.
النوع: إنشاء نمط فئة
مخطط الفصل:
يستخدم نمط النموذج الأولي بشكل أساسي لنسخ الكائنات ، ويعتبر جوهره النموذج الأولي للنموذج الأولي في مخطط الفئة. تحتاج فئة النموذج الأولي إلى تلبية الشرطين التاليين:
تنفيذ واجهة استنساخ. هناك واجهة مستنسخة بلغة Java ، والتي تحتوي على وظيفة واحدة فقط ، وهي إخطار الجهاز الظاهري في وقت التشغيل الذي يمكنه استخدام طريقة الاستنساخ بأمان على الفئات التي تنفذ هذه الواجهة. في جهاز Java Virtual ، يمكن نسخ الفئات التي تنفذ هذه الواجهة فقط ، وإلا سيتم طرح clonenotsupportedException في وقت التشغيل.
أعد كتابة طريقة الاستنساخ في فئة الكائن. في Java ، فئات الوالدين لجميع الفئات هي فئات الكائنات. هناك طريقة استنساخ في فئة الكائن ، التي تُرجع نسخة من الكائن ، ولكن نطاقه من النوع المحمي ، ولا يمكن استدعاء الفئات العامة. لذلك ، تحتاج فئة النموذج الأولي إلى تعديل نطاق طريقة الاستنساخ إلى النوع العام.
وضع النموذج الأولي هو وضع بسيط نسبيًا ويسهل فهمه. لتنفيذ واجهة وإعادة كتابة طريقة ، يتم الانتهاء من وضع النموذج الأولي. في التطبيقات العملية ، نادراً ما تظهر أنماط النموذج الأولي بمفردها. غالبًا ما يتم خلطه مع أنماط أخرى ، ويتم استبدال النموذج الأولي من فئة النموذج الأولي أيضًا بفئات مجردة.
رمز التنفيذ:
حزمة النموذج الأولي ؛ الطبقة العامة النموذج الأولي ينفذ استنساخ {Override المحمي النموذجي clone () {prototypeclass النموذج الأولي = null ؛ حاول {protypeClass = (OrityTypEclass) super.clone () ؛ } catch (clonenotsupportedException e) {// todo catch catch e.printstacktrace () ؛ } إرجاع النموذج الأولي ؛ }}عميل:
حزمة النموذج الأولي ؛ عميل الفئة العامة {public static void main (string [] args) {prototypeclass obj1 = new OrityTypEclass () ؛ النموذج الأولي OBJ2 = OBJ1.CLONE () ؛ System.out.println (OBJ1) ؛ System.out.println (OBJ2) ؛ }} مزايا وضع النموذج الأولي والسيناريوهات المعمول بها
يعد إنشاء كائنات باستخدام وضع النموذج الأولي أفضل بكثير من طريقة جديدة مباشرة ، لأن طريقة استنساخ فئة الكائن هي طريقة محلية تعالج التدفقات الثنائية مباشرة في الذاكرة ، خاصة عند نسخ كائنات كبيرة ، يكون فرق الأداء واضحًا للغاية.
فائدة أخرى لاستخدام أنماط النموذج الأولي هي تبسيط إنشاء الكائنات ، مما يجعل إنشاء كائنات بسيطة مثل ملصق النسخ عندما نقوم بتحرير مستند.
بسبب المزايا المذكورة أعلاه ، يمكنك التفكير في استخدام أنماط النموذج الأولي عندما تحتاج إلى إنشاء كائنات مماثلة بشكل متكرر. على سبيل المثال ، تحتاج إلى إنشاء كائن في جسم حلقة. إذا كانت عملية إنشاء الكائن أكثر تعقيدًا أو أن عدد الدورات كثيرة ، فلا يمكن أن يؤدي استخدام وضع النموذج الأولي إلى تبسيط عملية الإنشاء فحسب ، بل تحسين الأداء الكلي للنظام كثيرًا.
النموذج الأولي للطبقة العامة ينفذ clonable {private ArrayList List = new ArrayList () ؛ النموذج الأولي العام clone () {النموذج الأولي النموذجي = null ؛ حاول {النموذج الأولي = (النموذج الأولي) super.clone () ؛ النموذج الأولي. } catch (clonenotsupportedException e) {E.PrintStackTrace () ؛ } إرجاع النموذج الأولي ؛ }}ملاحظات على وضع النموذج الأولي:
نظرًا لأن ArrayList ليس نوعًا أساسيًا ، فلن يتم نسخ قائمة متغير الأعضاء ، ونحن بحاجة إلى تنفيذ نسخة عميقة من قبل أنفسنا. لحسن الحظ ، فإن معظم فئات الحاويات التي توفرها Java تنفذ الواجهة المستنسخة. لذلك ليس من الصعب بشكل خاص تحقيق نسخ عميق.
ملاحظة: في مشكلات النسخ العميقة والنسخ الضحلة ، ستحدث نسخة عميقة ، بما في ذلك الأنواع الأساسية في 8 Java وأنواع التغليف الخاصة بها ، وهناك أيضًا أنواع سلسلة. الباقي نسخ ضحلة.