يمكن أن يضيف نمط الديكور ديناميكي بعض المسؤوليات الإضافية إلى كائن ما. من حيث إضافة وظائف ، يكون وضع الديكور أكثر مرونة من توليد الفئات الفرعية.
البيئة المعمول بها لهذا الوضع هي:
(1) إضافة مسؤوليات إلى كائن واحد بطريقة ديناميكية وشفافة دون التأثير على كائنات أخرى.
(2) التعامل مع تلك المسؤوليات التي يمكن إلغاؤها.
(3) عندما لا يمكن استخدام طريقة توليد الفئات الفرعية للتوسع. أحد السيناريو هو أنه قد يكون هناك عدد كبير من الامتدادات المستقلة ، والتي ستنتج عددًا كبيرًا من الفئات الفرعية لدعم كل مجموعة ، مما يؤدي إلى انفجار عدد الفئات الفرعية. قد تكون هناك حالة أخرى لأن تعريف الفصل مخفي ، أو لا يمكن استخدام تعريف الفئة لإنشاء فئات فرعية.
الخطوات الرئيسية لتنفيذ هذا الوضع:
(1) مكون (الفئة الأساسية للكائن المزين): يحدد واجهة الكائن ، والتي يمكن أن تضيف بشكل ديناميكي مسؤوليات إلى هذه الكائنات ؛
(2) concreteComponent (كائن زخرفي محدد): يحدد كائن معين ، ويمكن للمزخرف إضافة مسؤوليات إضافية إليه ؛
(3) ديكور (فئة Decorator Abstract): يحافظ على إشارة إلى مثيل المكون ويحدد واجهة تتفق مع المكون ( أي ، لتربير أو تنفيذ الفئة الأساسية للكائن المزين ) ؛
(4) ConcretedEcorator: كائن زخرفي محدد ، إضافة مسؤوليات محددة إلى الكائنات الزخرفية المحددة التي تم عقدها داخليًا ؛
قد يكون من الصعب بعض الشيء على الجميع فهمه ، لذلك ما زلنا هادئين:
بعد فصل الشتاء ، أصبح الطقس أكثر برودة وأكثر برودة. بعد الخروج من العمل ، بصفته عشاق الطعام المخضرم ، سيكون من الرائع أن يكون لديك موعد مع اثنين أو ثلاثة من الأصدقاء للحصول على وليمة وعاء ساخن. عند الحديث عن القدر الساخن ، يجب أن أذكر وعاء Dalong Hot الذي أكلته في Chengdu ، مع جميع أنواع قيعان القدر والأطباق الجانبية ، ولكن المفضل لدي هو قيعان القدر الأصلية من Dalong Hot Pot ، ولحم البقر الحار ، و Dadao Tripe ، و Tianwei Sausage ، و Tuotuo Beef ، وأشرطة لحم الخنزير الحافة ، وما إلى ذلك. يمكنني حتى أن أفكر في ذلك.
عندما يتعلق الأمر بهذا ، يجب أن تشعر قليلاً به. أسفل القدر المذكور أعلاه هو في الواقع قاعدة الكائن الزخرفي . المكونات هي في الواقع الكائن التجريدي المزخرف . قيعان الوعاء المحددة لقاع الوعاء الأصلي Dalong Hot Pot هي الكائنات الزخرفية المحددة. الأطباق الجانبية المختلفة المستخدمة لتزيين قاع الوعاء هي الأشياء الزخرفية المحددة . الحديث عن هذا ، كان ينبغي على الجميع تحقيقه فجأة. لنبدأ تطبيق الرمز المحدد:
الخطوة 1: تحديد الفئة الأساسية للكائن المزين (يمكن أن تكون فئة أو واجهة مجردة)
الواجهة العامة Guodi {Public Float Cost () ؛ // بالطبع يجب أن يكون قاع الوعاء أسعارًا للسلسلة العامة () ؛ // يجب أن يكون الاسم متاحًا أيضًا} الخطوة 2: تحديد الكائن الزخرفي المحدد (أي قيعان وعاء مختلفة ، يتم تعريف اثنين هنا)
الطبقة العامة Yuanyang تنفذ Guodi {Override Public Float Cost () {Return 48.0f ؛ } Override public string name () {return "double pot base" ؛ }} الفئة العامة Dalongyan تنفذ Guodi {Override Public Float Cost () {return 59.0f ؛ } Override public string name () {return "Dalong Hot Pot Base Original Pot" ؛ }}الخطوة 3: تحديد فئة Decorator Abstract
Public Abstract Class Peicai تنفذ Guodi {Private Guodi Guodi ؛ Public FoodDecorator (Guodi Guodi) {Super () ؛ this.guodi = guodi ؛ } Override Public Float Cost () {return guodi.cost () ؛ } Override public string name () {return guodi.name () ؛ }}الخطوة 4: تحديد كائن الديكور المحدد
الطبقة العامة malaniurou يمتد peicai {public malaniurou (guodi guodi) {super (guodi) ؛ } Override Public Float Cost () {return super.cost ()+46f ؛ } Override public string name () {return super.name ()+"+beef mostice" ؛ }} الفئة العامة maodu يمتد peicai {public maodu (guodi guodi) {super (guodi) ؛ } Override Public Float Cost () {return super.cost ()+30f ؛ } Override public string name () {return super.name ()+"+big knife tripe" ؛ }}فئة الاختبار:
اختبار الفئة العامة {public static void main (string [] args) {guodi guodi = new Dalongyan () ؛ // order a dalong hot pot pot orgin ortival malaniurou y = new malaniurou (guodi) ؛ أوامر "+x.name ()+" ، تستهلك "+s.cost ()) ؛ }}نتيجة الإخراج:
1. تم طلب ما مجموعه Dalong Hotpot Original Pot Bottom + Beef Dadao Tripe ، وتم استهلاك ما مجموعه 135
ما سبق هو نموذج ديكور جافا الذي قدمه لك المحرر (فهم مبدأ الكود من منظور الحياة الحقيقية). آمل أن يكون ذلك مفيدًا للجميع. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر على الجميع في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!