Latest web development tutorials

نموذج أولي

ويستخدم نموذج أولي (نموذج نمط) لإنشاء كائن مكررة، مع ضمان الأداء. هذا النوع من أنماط التصميم تنتمي إنشاء مخطط، الذي يوفر أفضل وسيلة لخلق الكائنات.

هذا النموذج هو واجهة النموذج، والذي يستخدم لإنشاء نسخة من الكائن الحالي. عندما تكلفة مباشرة لإنشاء كائن كبيرة نسبيا، ثم استخدام هذا النموذج. على سبيل المثال، يكون الجسم بحاجة إلى أن تنشأ بعد قاعدة البيانات هي عملية مكلفة. يمكننا تخزين الكائن في المرة القادمة طلبا للعودة إلى استنساخ لها، والوقت اللازم لتحديث قاعدة البيانات، وذلك للحد من المكالمات قاعدة البيانات.

مقدمة

القصد: النموذج المستخدم في إنشاء مثيلات أنواع الكائن المحدد، وإنشاء كائنات جديدة عن طريق نسخ النموذج.

أساسا لحل: إنشاء وحذف النموذج في وقت التشغيل.

متى تستخدم: 1، عندما نظام يجب أن تكون مستقلة عن لخلق منتج وتكوينها والتمثيل.2، عندما مثيل من الدرجة هو أن تحدد في وقت التشغيل، على سبيل المثال، عن طريق تحميل الديناميكي. 3، وذلك لتجنب خلق تسلسل الدرجة والتسلسل الهرمي المنتج عندما الطبقة مصنع موازية. 4، عند يمكن أن يكون لها مثيل من فئة قليلة مجموعات مختلفة من الدولة في وقت واحد. إنشاء عدد مماثل من النماذج واستنساخ لهم قد تكون أكثر ملاءمة من دليل في كل مرة مع الدولة المناسبة مثيل الطبقة.

كيفية حل: استخدام كائن النموذج القائم، وبسرعة إنتاج كائن النموذج كمثال.

مفتاح الرمز: 1، لتحقيق استنساخ العملية، JAVA الميراث Cloneable، كتابة استنساخ ()، ويمكن استخدامها في MemberwiseClone الطبقة كائن. NET () طريقة لتحقيق الهدف من نسخة أو التسلسل الضحلة وسيلة لتحقيق نسخة عميق.2، ونفس نموذج أولي للاقتران بين المستخدم وعزل نوع معين (نوع متغير) بين كائن الفئة، فإنه يتطلب أيضا أن هذه "نوع متغير" يحتوي على واجهة مستقرة.

أمثلة التطبيق: 1، انقسام الخلايا.2، جافا في طريقة استنساخ كائن ().

المزايا: 1، وتحسين الأداء.2 الهروب منشئ القيد.

العيوب: 1، مع طريقة الاستنساخ تتطلب أن تأخذ في الاعتبار فئة من الوظائف، والتي الفئة الجديدة ليست صعبة، ولكن لفئات القائمة قد لا يكون من السهل جدا، وخصوصا عندما إشارة الطبقة لا يدعم التسلسل من وجوه غير مباشر، أو بنية دوري تحتوي على إشارة إلى الوقت.2، يجب تطبيق واجهة Cloneable. 3، وتجنب منشئ القيد.

سيناريوهات الاستخدام: 1، والسيناريوهات الأمثل للموارد.2، والطبقة التهيئة تحتاج إلى هضم الكثير من الموارد، بما في ذلك بيانات الموارد، موارد الأجهزة. 3 والأداء ومتطلبات السلامة من مكان الحادث. 4، عن طريق توليد كائن جديد يتطلب شاقة للغاية إعداد أو الوصول إلى البيانات، يمكنك استخدام نموذج أولي. 5، عدد وافر من الأشياء تعديل من قبل الموقع. 6، يكون الجسم بحاجة لتوفير الوصول إلى أشياء أخرى، ولكل المتصل قد تحتاج إلى تعديل قيمة لها، والنظر في استخدام نموذج أولي للحصول على نسخ متعددة من الأشياء المستخدمة من قبل المتصل. 7، في المشروع الفعلي، ونموذج أولي نادرا ما يحدث وحده، وتظهر طريقة مصنع نمط عموما معا، وخلق طريقة استنساخ كائن، ثم قدمت إلى المتصل من خلال طريقة المصنع. وجافا نموذج أولي تم دمج ككل لا يتجزأ، ويمكن بسهولة أن تستخدم للاستخدام.

ملاحظة: مع فئة من instantiating لبناء الكائن الجديد مختلفة، نموذج أولي هو توليد كائن جديد عن طريق نسخ كائن موجود.نسخة الضحلة تدرك Cloneable، كتابة، قراءة نسخة عميق تيار ثنائي من خلال تنفيذ تسلسل.

تحقيق

سوف نقوم بإنشاء طبقةالشكلالمجرد وتمتد الطبقات كيان الطبقةالشكل.الخطوة التالية هي تحديدShapeCache الصف،يتم تخزين شكل هذه الكائنات فيجدول هاشفي، وعند طلب العودة إلى استنساخ بهم.

PrototypPatternDemo، والطبقاتمظاهرة لدينا باستخدام الدرجةShapeCacheللحصول على كائنالشكل.

نموذج أولي UML الرسم البياني

خطوة 1

إنشاء فئة مجردة التي تطبق الواجهةClonable.

Shape.java

العام الطبقة الشكل المجرد تنفذ Cloneable {
   
   معرف سلسلة الخاص؛
   نوع سلسلة المحمية؛
   
   مجرد سحب الفراغ ()؛
   
   جمهور سلسلة getType () {
      العودة نوع.
   }
   
   جمهور سلسلة getId () {
      العودة هوية.
   }
   
   setId الفراغ الجمهور (معرف سلسلة) {
      this.id = معرف.
   }
   
   استنساخ كائن العام () {
      الاعتراض استنساخ = فارغة؛
      محاولة {
         استنساخ = super.clone ()؛
      } صيد (CloneNotSupportedException ه) {
         e.printStackTrace ()؛
      }
      العودة استنساخ.
   }
}

خطوة 2

إنشاء فصول كيان فوق يمتد فئة مجردة.

Rectangle.java

الطبقة العامة مستطيل يمتد الشكل {

   الجمهور مستطيل () {
     اكتب = "مستطيل".
   }

   Override
   تعادل باطلة العامة () {
      System.out.println ( "داخل المستطيل :: التعادل () طريقة.")؛
   }
}

Square.java

ساحة فئة العمومي يمتد الشكل {

   ساحة الجمهور () {
     اكتب = "ساحة".
   }

   Override
   تعادل باطلة العامة () {
      System.out.println ( "ساحة داخل :: التعادل () طريقة.")؛
   }
}

Circle.java

دائرة الطبقة العامة ويمتد الشكل {

   الجمهور الدائرة () {
     اكتب = "الدائرة".
   }

   Override
   تعادل باطلة العامة () {
      System.out.println ( "داخل دائرة :: التعادل () طريقة.")؛
   }
}

خطوة 3

إنشاء فئة، والحصول على الطبقات كيان من قاعدة البيانات، وتخزينها فيجدول هاشفي.

ShapeCache.java

استيراد java.util.Hashtable.

الطبقة العامة ShapeCache {
	
   خاص ثابت جدول هاش <سلسلة الشكل> shapeMap 
      = جديد جدول هاش <سلسلة الشكل> ()؛

   العام ثابت الشكل getShape (سلسلة 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للحصول يتم تخزين شكل استنساخفي جدول هاش.

PrototypePatternDemo.java

الطبقة العامة PrototypePatternDemo {
   (وسائط سلسلة []) العامة ساكنة باطلة الرئيسية {
      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

تحقق من الانتاج.

الشكل: الدائرة
الشكل: ساحة
الشكل: مستطيل