مفهوم
يعلق نمط الديكور ديناميكيًا مسؤولية الكائن. لتمديد الوظائف ، يوفر الديكور بديلاً أكثر مرونة من الميراث.
الديكور والكائن المزين لهما نفس supertype.
يمكنك لف كائن مع واحد أو أكثر من الديكور.
نظرًا لأن الديكور والكائن المزين بهما نفس SuperType ، في أي مناسبة يكون الكائن الأصلي (المكتوب) مطلوبًا ، يمكن استبدال الكائن المزين به.
قد يضيف الديكور سلوكه قبل و/أو بعد تصرفات الديكور الذي يتم تكليفه لتحقيق غرض محدد.
يمكن تزيين الكائنات في أي وقت ، لذلك يمكن تزيين الكائنات ديناميكيًا وبشكل غير محدود مع ديكورك المفضل أثناء وقت التشغيل.
في Java ، العديد من الفصول تحت حزمة IO هي تجسيد لأنماط الديكور النموذجية ، مثل:
الطبقة الزخرفية تنفذ نفس الواجهة مثل الفئة المزينة.
لا يهتم الفئة المزينة بالفئة التنفيذية التي يتم استخدامها لتزيينه.
تسمى نفس طريقة العمل من قبل الفئة الزخرفية لتعزيز وظائف الفئة الزخرفية.
مثال:
الرسم البياني الفئة
الواجهة العامة ireader {void read () ؛ } ينفذ قارئ الفئة العامة ireader {Override public void read () {system.out.println ("read of reader") ؛ }} الفئة العامة bufferreader تنفذ ireader {private ireader mreader ؛ bufferedReader العامة (reader reader) {this.mreader = reader ؛ } Override public void read () {system.out.println ("read of bufferedReader") ؛ MREADER.READ () ؛ }} اختبار الفئة العامة {public static void main (string [] args) {reader reader = new reader () ؛ reader.read () ؛ System.out.println ("-----------") ؛ BufferedReader BufferedReader = جديد BufferedReader (reader) ؛ BufferedReader.Read () ؛ }} سمات:
1. الكائنات الزخرفية والأشياء الحقيقية لها نفس الواجهة. وبهذه الطريقة ، يمكن للكائن العميل التفاعل مع الكائن الزخرفي بنفس طريقة الكائن الحقيقي.
2. يحتوي الكائن الزخرفي على إشارة إلى كائن حقيقي
3. الكائن الزخرفي يقبل جميع الطلبات من العميل. يقوم بإعادة توجيه هذه الطلبات إلى الكائن الحقيقي.
4. يمكن للكائنات تزيين إضافة بعض الميزات الإضافية قبل أو بعد إعادة توجيه هذه الطلبات. هذا يضمن أنه في وقت التشغيل ، يمكن إضافة وظائف إضافية خارجيًا دون تعديل بنية كائن معين.
في التصميم الموجهة للكائنات ، عادة ما يتم تحقيق الامتدادات الوظيفية لفئة معينة من خلال الميراث. بعد الديكور ، يتم عقد الكائن الحقيقي لتعزيز وظيفته.
الفرق بين Decorator ووضع المحول:
حول المسؤوليات الجديدة: يمكن للمحولات أيضًا إضافة مسؤوليات جديدة عند التحويل ، ولكن الغرض الرئيسي ليس كذلك. يضيف نموذج الديكور بشكل أساسي مسؤوليات جديدة إلى الديكور.
حول الكائن الذي يلفه: يعرف المحول تفاصيل المحول (أي فئة المحول). يعرف الديكور فقط ماهية الواجهة.
أما بالنسبة لنوعه المحدد (سواء كان فئة أساسية أو فئة أخرى مشتقة) ، فمن المعروف فقط أثناء وقت التشغيل.