تصف هذه المقالة حالة من الكعك المصبوغ على البخار التي تنفذها Java استنادًا إلى نمط الديكور. شاركه للرجوع إليه ، على النحو التالي:
1. تعريف نمط
يمتد نمط الديكور ديناميكيًا وظيفة كائن دون تغيير الملف الأصلي واستخدام الميراث. يلف الكائن الحقيقي عن طريق إنشاء كائن تغليف ، أي الديكور.
الكائنات الزخرفية والكائنات الحقيقية لها نفس الواجهة ، بحيث يمكن للكائنات العميل التفاعل مع الكائنات الزخرفية بنفس طريقة الكائنات الحقيقية.
يحتوي كائن مزخرف على إشارة إلى كائن حقيقي.
2. أمثلة على النموذج
1. تحليل النمط
نستخدم حالة البائعين الأسود لصنع الكعك المصبوغ لتوضيح هذا النموذج.
2. وضع الديكور مخطط فئة ثابتة
3. مثال رمز
3.1 قم بإنشاء واجهة كعكة مطهو على البخار - ibread
package com.demo.abs ؛/** * واجهة معالجة الكعك على البخار * * Author * */واجهة عامة ibread {// إعداد المواد prepair prepair () ؛ // Harmony Public void Kneeflour () ؛ // الكعك على البخار باطلة عامة على البخار () ؛ / *** معالجة الكعك على البخار*/ عملية الفراغ العام () ؛}3.2 تطبيق BUN الطبيعي - Normalbread
package com.demo.abs ؛/** * تنفيذ الكعك على البخار العادي * * author * */public class normalbread تنفس ibread {// إعداد المكونات prepair prepair () {system.out.println ("تحضير الدقيق ، مسحوق الماء والخبز ...") ؛ } // Hemian public void kneeflour () {system.out.println ("hmian ...") ؛ }. } / *** معالجة الكعك على البخار* / public void process () {// إعداد المكونات prepair () ؛ // kneadflour () ؛ // على البخار على البخار () ؛ }}3.3 إنشاء ديكور مجردة - مجردة bread
Package com.demo.decorator ؛ import com.demo.abs.ibread ؛/** * Decorator Abstract * * Author * */public agractsbread erctionbread تنفذ ibread {// store Incoming Ibread Object private ibread bread ؛ Public AbstractBread (iBread Bread) {this.bread = bread ؛ } // إعداد المادة العامة propid () {this.bread.prepair () ؛ } // بلطف باطل kneeflour () {this.bread.kneadflour () ؛ } // buns public void steamed () {this.bread.steamed () ؛ } // معالجة الكعك على البخار public process () {prepair () ؛ Kneeflour () ؛ على البخار () ؛ }}3.4 قم بإنشاء ديكور صبغ - CornDecorator
package com.demo.decorator ؛ import com.demo.abs.ibread ؛/** * dyeed corn buns * * author * */public class corndecorator يمتد ملخص {// construct method corndecorator (ibread bread) {super (bread) ؛ }. } // overload the kneeflour kneeflour kneeflour () {// this.paint () بعد إضافة صبغة إلى الدقيق ؛ // Paste Super.KneadFlour () ؛ }}3.5 قم بإنشاء ديكور Sealfy - SweetDecorator
package com.demo.decorator ؛ import com.demo.abs.ibread ؛/** * cyperus steamed bun * * author * */public class SweetDecorator يمتد ملخص {// construct method sweetdecorator (ibread bread) {super (bread) ؛ }. }. // hemma super.kneadflour () ؛ }}3.6 إنتاج الكعك على البخار ذرة حلوة - عميل
package com.demo ؛ import com.demo.abs.ibread ؛ import com.demo.abs.normalbread ؛ import com.demo.decorator.corndecorator ؛ import com.demo.deCorator.sweetDecorator ؛/** * application * *////public clip // إنتاج نظام الكعك المزخرف على البخار. . // لنبدأ في تزيين الكعك على البخار! ! ! // استخدم saccharin لتزيين الكعك على البخار NormalBread = new SweetDecorator (NormalBread) ؛ // استخدم لون الليمون الأصفر لتزيين الكعك المطهو على البخار العادي = corndecorator جديد (NormalBread) ؛ // إنتاج معلومات الكعك على البخار NormalBread.process () ؛ System.out.println ("===== تزيين نهاية الكعك على البخار !!!") ؛ }}4. نتائج التشغيل
==== بدء تزيين الكعك على البخار! ! !
تحضير الدقيق والماء ومسحوق الخبز ...
أضف تلوين الليمون الأصفر ...
أضف السيانين ...
شحم...
الكعك على البخار ... الكعك على البخار العطرية خارج الفرن!
==== تنتهي كعكة على البخار الزخرفية! ! !
3. مبادئ تصميم هذا النموذج
1 جزء تغيير مغلق
2 مبدأ "مفتوح وإغلاق"
3 برمجة موجهة تجريدية
4. تفضيل المجموعات بدلاً من الميراث
4. استخدام المناسبات
1. عندما نحتاج إلى إضافة ميزة أو مسؤولية جديدة إلى كائن موجود بشكل ديناميكي ، يمكننا التفكير في استخدام نمط الديكور.
2. عندما تتغير مسؤوليات الكائن في كثير من الأحيان أو يجب زيادة المسؤوليات ديناميكيًا ، تجنب إضافة توسع الفئة الفرعية الموروثة للتكيف مع هذه التغييرات ، لأن هذه الطريقة ستؤدي إلى توسيع الفئة الفرعية بسرعة كبيرة ويصعب التحكم فيها. في هذا الوقت ، يمكن استخدام وضع الديكور.
5. وضع ديكور مخطط فئة ثابتة
لمزيد من المعلومات حول خوارزميات Java ، يمكن للقراء المهتمين بهذا الموقع عرض الموضوعات: "بنية بيانات Java وبرنامج تعليمي الخوارزمية" ، "ملخص" Tips Java ".
آمل أن يكون هذا المقال مفيدًا لبرمجة Java للجميع.