الفرق بين الواجهة والوكالة والمحول والزينة أنماط تصميم؟ [مغلق

StackOverflow https://stackoverflow.com/questions/3489131

سؤال

ما هو الفرق بين أنماط تصميم الواجهة والوكالة والمحول وتصميم الديكور؟

لم أقرأ أبدًا تفسيرًا واضحًا ، ما هو لك؟

هل كانت مفيدة؟

المحلول

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

مظهر زائف يشبه بوابة بسيطة إلى مجموعة معقدة من الوظائف. أنت تصنع صندوقًا أسود لعملائك للقلق أقل أي جعل الواجهات أبسط.

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

ديكور يستخدم لإضافة المزيد من البارود إلى كائناتك (لاحظ الكائنات المصطلح - عادةً ما تقوم بتزيين الكائنات ديناميكيًا في وقت التشغيل). لا تخفي/تضعف الواجهات الموجودة للكائن ولكنك ما عليك سوى تمديده في وقت التشغيل.

الآن بعد أن شاركت في مشاركة ديكور ، ربما ترغب في معرفة سبب التركيز على كائن الكلمة - بعض اللغات (مثل Java) ببساطة لا تسمح بالميراث الافتراضي (أي الميراث المتعدد كما يفعل C ++) للسماح لك بإنجاز هذا على وقت الترجمة.

نظرًا لأننا نجرنا في ميراث متعددة (والماس اللعين) سوف تبحث عنه Mixins -- و هو طلب خط خطي من الواجهات للتغلب على مشاكل الميراث المتعدد. ومع ذلك ، لا تختلط المزيج بشكل جيد. وينتهي بنا المطاف مع سمات - نعم هؤلاء نقطية صغيرة من السلوك أن ترى منبثقًا طوال الوقت في معلمات القالب في C ++. تحاول السمات معالجة قضايا تكوين السلوك وتحلله بطريقة أنيقة مع عدم الذهاب إما للميراث المتعدد أو التسلسل المطلوب.

نصائح أخرى

مظهر زائف

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

مشترك كهربائي

يمكن العثور على مثال جيد على ذلك هنا, ، على ويكيبيديا. كائن عميل Source ترغب في استدعاء طريقة على كائن آخر Target, ، لكن واجهة الكائن الآخر تختلف مع ما يتوقعه العميل.

أدخل كائن المحول.

يمكن أن تتلقى مكالمة من Source كائن ، وخلف الكواليس ، اتصل Target الطريقة التي يجب استخدامها.

Source->CallMethodAOnTarget() ---< Adaptor.CallMethodAOnTarget() this calls ---> Target.MethodWithDifferentSignatureAndName(int i)

أما بالنسبة للوكالة ، فليس لدي أي خبرة في نمط التصميم هذا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top