Latest web development tutorials

وزن الذبابة

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

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

مقدمة

القصد: استخدام تبادل لدعم أعداد كبيرة من الكائنات الدقيقة الحبيبات.

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

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

كيفية إصلاح: تحليل مع رمز التعريف الفريد، إذا كان هناك في الذاكرة، يتم إرجاع رمز هوية فريدة من الكائنات التي تم تحديدها.

رمز مفتاح: HashMap المخزنة مع هذه الكائنات.

أمثلة التطبيق: 1، جافا في سلسلة، اذا عاد، إن لم يكن ثم إنشاء سلسلة المخزنة في تجمع المخزن المؤقت سلسلة الداخل.2، وقاعدة بيانات تجمع البيانات.

المزايا: خفض كبير في خلق الأشياء، والحد من ذاكرة النظام، بحيث يتم تحسين تلك الكفاءة.

العيوب: زيادة المسؤول عن النظام، ونحن بحاجة لفصل وضع الدولة الداخلي والخارجي، والدولة الخارجية للطبيعة ويجب بطبيعتها لا تتغير مع الحالة الداخلية للتغيير، وإلا فإنه سيتم إنشاء نظام الفوضى.

سيناريوهات الاستخدام: 1، ونظام لديها عدد كبير من الكائنات مماثلة.2، تحتاج إلى تجميع المشهد.

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

تحقيق

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

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

FlyWeightPatternDemo،لدينا عرض للحصول على الدرجة لاستخدام كائنالشكلShapeFactory. وسوف تنقل المعلومات(أحمر / أخضر / أزرق / أسود/ أبيض)لShapeFactory،فإنه يحتاج للحصول على لون الكائن.

نمط وزن الذبابة UML الرسم البياني

خطوة 1

إنشاء واجهة.

Shape.java

الواجهة العمومية الشكل {
   تعادل باطل ()؛
}

خطوة 2

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

Circle.java

دائرة الطبقة العامة تنفذ الشكل {
   اللون سلسلة الخاص؛
   الباحث الخاص س.
   ذ كثافة العمليات الخاص؛
   دائرة نصف قطرها كثافة الخاص؛

   الدائرة العامة (لون سلسلة) {
      this.color = اللون.		
   }

   setX الفراغ الجمهور (كثافة العمليات خ) {
      this.x = س.
   }

   سيتي الفراغ جمهور (ذ كثافة العمليات) {
      this.y = ذ.
   }

   setRadius الفراغ الجمهور (دائرة نصف قطرها كثافة العمليات) {
      this.radius = نصف قطرها.
   }

   Override
   تعادل باطلة العامة () {
      System.out.println ( "الدائرة: رسم () [اللون:" + اللون 
         + "، X:" + س + "، ص:" + ص + "، دائرة نصف قطرها:" + دائرة نصف قطرها).
   }
}

خطوة 3

إنشاء مصنع لإنتاج الطبقات كيان الكائن على أساس المعلومات المقدمة.

ShapeFactory.java

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

الطبقة العامة ShapeFactory {
   خاص HashMap النهائي ثابت <سلسلة الشكل> circleMap = HashMap جديد ()؛

   جمهور ثابت الشكل getCircle (لون سلسلة) {
      دائرة دائرة = (دائرة) circleMap.get (لون)؛

      إذا (دائرة == فارغة) {
         دائرة = الدائرة الجديد (لون)؛
         circleMap.put (اللون، ودائرة)؛
         System.out.println ( "إنشاء دائرة اللون:" + اللون)؛
      }
      العودة دائرة.
   }
}

خطوة 4

استخدام المصنع للحصول على وجوه كيان الطبقة عن طريق تمرير معلومات اللون.

FlyweightPatternDemo.java

الطبقة العامة FlyweightPatternDemo {
   الألوان النهائية ثابتة خاصة سلسلة [] = 
      { "الأحمر"، "الخضراء"، "الأزرق"، "وايت"، "أسود"}؛
   (وسائط سلسلة []) العامة ساكنة باطلة الرئيسية {

      ل(كثافة العمليات ط = 0؛ ط <20؛ ++ ط) {
         دائرة دائرة = 
            (الدائرة) ShapeFactory.getCircle (getRandomColor ())؛
         circle.setX (getRandomX ())؛
         circle.setY (getRandomY ())؛
         circle.setRadius (100)؛
         circle.draw ()؛
      }
   }
   سلسلة ثابتة خاصة getRandomColor () {
      العودة الألوان [(الباحث) (Math.random () * colors.length)].
   }
   خاص الباحث getRandomX ثابت () {
      عودة (الباحث) (Math.random () * 100)؛
   }
   خاص الباحث getRandomY ثابت () {
      عودة (الباحث) (Math.random () * 100)؛
   }
}

خطوة 5

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

إنشاء دائرة اللون: أسود
دائرة: رسم () [اللون: أسود، س: 36، ص: 71، دائرة نصف قطرها: 100
إنشاء دائرة اللون: الأخضر
دائرة: رسم () [اللون: الأخضر، س: 27، ص: 27، دائرة نصف قطرها: 100
إنشاء دائرة اللون: أبيض
دائرة: رسم () [اللون: أبيض، س: 64، ص: 10، دائرة نصف قطرها: 100
إنشاء دائرة اللون: الأحمر
دائرة: رسم () [اللون: الأحمر، س: 15، ص: 44، دائرة نصف قطرها: 100
دائرة: رسم () [اللون: الأخضر، س: 19، ص: 10، دائرة نصف قطرها: 100
دائرة: رسم () [اللون: الأخضر، س: 94، ص: 32، دائرة نصف قطرها: 100
دائرة: رسم () [اللون: أبيض، س: 69، ص: 98، دائرة نصف قطرها: 100
إنشاء دائرة اللون: الأزرق
دائرة: رسم () [اللون: الأزرق، س: 13، ص: 4، دائرة نصف قطرها: 100
دائرة: رسم () [اللون: الأخضر، س: 21، ص: 21، دائرة نصف قطرها: 100
دائرة: رسم () [اللون: الأزرق، س: 55، ص: 86، دائرة نصف قطرها: 100
دائرة: رسم () [اللون: أبيض، س: 90، ص: 70، دائرة نصف قطرها: 100
دائرة: رسم () [اللون: الأخضر، س: 78، ص: 3 ونصف القطر: 100
دائرة: رسم () [اللون: الأخضر، س: 64، ص: 89، دائرة نصف قطرها: 100
دائرة: رسم () [اللون: الأزرق، والعاشر: 3، ص: 91، دائرة نصف قطرها: 100
دائرة: رسم () [اللون: الأزرق، س: 62، ص: 82، دائرة نصف قطرها: 100
دائرة: رسم () [اللون: الأخضر، س: 97، ص: 61، دائرة نصف قطرها: 100
دائرة: رسم () [اللون: الأخضر، س: 86، ص: 12، دائرة نصف قطرها: 100
دائرة: رسم () [اللون: الأخضر، س: 38، ص: 93، دائرة نصف قطرها: 100
دائرة: رسم () [اللون: الأحمر، س: 76، ص: 82، دائرة نصف قطرها: 100
دائرة: رسم () [اللون: الأزرق، س: 95، ص: 82، دائرة نصف قطرها: 100