Latest web development tutorials

مزخرف

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

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

نحن نستخدم الأمثلة التالية للتدليل على نمط الديكور. من بينها، سنشكل الديكور بألوان مختلفة، دون تغيير شكل الطبقة.

مقدمة

القصد: حيوي لكائن لإضافة بعض المسؤوليات الإضافية.زيادة وظيفة، مقارنة نمط الديكور شاء subclasses ترث أكثر مرونة.

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

متى تستخدم: كنت لا تريد زيادة في حالة العديد من الفئات تمديد فئة فرعية.

كيفية حل: تقسيم المسؤوليات وظيفية محددة، في حين أن وراثة نمط الديكور.

كود رئيسية هي: 1، وأعمال الطبقة المكوناتكما دورا مجردة، لا ينبغي تنفيذ محددة. 2، فئة المراجع الدرجة المعدلة ومكون الميراث، والطبقات تمديد محددة تجاوز أسلوب فئة الأم.

أمثلة التطبيق: 1، 72 التغيير الملك القرد عندما يصبح "المعبد"، وقال انه كان مجرد قرد، لكن لديه وظيفة المعبد.2، بغض النظر عن إطار صورة لا يمكن أن تكون معلقة على الجدار، ولكن عادة ما يكون هناك إطار الصورة، وإطار معلق في الواقع على الحائط. قبل معلقة على الجدار، ويمكن أن تكون اللوحة المغطاة بالزجاج، التي شنت على منزل الإطار، ثم اللوحة، الزجاج والإطار تشكيل لكائن.

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

العيوب: أكثر تعقيدا متعدد الطبقات الزخرفية.

سيناريوهات الاستخدام: 1، وتمتد وظيفة من الدرجة.2، وزيادة وظائف حيوية ودينامية ألغت.

ملاحظة: يمكنك استبدال الميراث.

تحقيق

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

RedShapeDecoratorهو تحقيقShapeDecoratorالطبقاتالكيان.

DecoratorPatternDemo، والطبقاتمظاهرة لدينا باستخدامRedShapeDecoratorلتزيين كائنالشكل.

نمط الديكور UML الرسم البياني

خطوة 1

إنشاء واجهة.

Shape.java

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

خطوة 2

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

Rectangle.java

الطبقة العامة مستطيل الشكل تنفذ {

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

Circle.java

دائرة الطبقة العامة تنفذ الشكل {

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

خطوة 3

إنشاء تحقيق مجردة واجهةالشكلالزخرفية.

ShapeDecorator.java

الجمهور ShapeDecorator فئة مجردة تطبق الشكل {
   محميون decoratedShape الشكل.

   ShapeDecorator الجمهور (شكل decoratedShape) {
      this.decoratedShape = decoratedShape.
   }

   تعادل باطلة العامة () {
      decoratedShape.draw ()؛
   }	
}

خطوة 4

إنشاء كيان الزخرفية الطبقةShapeDecoratorطويلة.

RedShapeDecorator.java

الطبقة العامة RedShapeDecorator يمتد ShapeDecorator {

   RedShapeDecorator الجمهور (شكل decoratedShape) {
      السوبر (decoratedShape)؛		
   }

   Override
   تعادل باطلة العامة () {
      decoratedShape.draw ()؛	       
      setRedBorder (decoratedShape)؛
   }

   setRedBorder الفراغ الخاص (شكل decoratedShape) {
      System.out.println ( "لون الحدود: الأحمر")؛
   }
}

خطوة 5

RedShapeDecoratorاستخدامها لتزيين كائنالشكل.

DecoratorPatternDemo.java

الطبقة العامة DecoratorPatternDemo {
   (وسائط سلسلة []) العامة ساكنة باطلة الرئيسية {

      تشكيل دائرة = الدائرة جديد ()؛

      تشكيل redCircle = RedShapeDecorator جديدة (الدائرة جديد ())؛

      تشكيل redRectangle = RedShapeDecorator الجديدة (مستطيل جديد ())؛
      System.out.println ( "الدائرة مع الحدود العادية")؛
      circle.draw ()؛

      System.out.println ( "\ nCircle من الحدود الحمراء")؛
      redCircle.draw ()؛

      System.out.println ( "\ nRectangle من الحدود الحمراء")؛
      redRectangle.draw ()؛
   }
}

خطوة 6

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

دائرة مع الحدود الطبيعي
الشكل: الدائرة

دائرة الحدود الحمراء
الشكل: الدائرة
اللون الحدود: الأحمر

مستطيل من الحدود الحمراء
الشكل: مستطيل
اللون الحدود: الأحمر