تكرار السؤال: …
الإجابة المختصرة
الـ Adapter يغير واجهة كائن موجود ليتوافق مع واجهة أخرى، والـ Decorator يضيف وظائف ومسؤوليات جديدة لنفس الواجهة، والـ Proxy يتحكم في الوصول للكائن مع الاحتفاظ بنفس الواجهة تماماً.
الشرح
الـ Adapter مثل محول الكهرباء للمسافرين: يحول واجهة غير متوافقة إلى واجهة يتوقعها العميل. الـ Decorator مثل ارتداء معطف فوق الملابس: يغلف الكائن الأصلي ويضيف سلوكيات جديدة (مثل التخزين المؤقت Caching أو التسجيل Logging) دون تعديل الفئة الأصلية. أما الـ Proxy فهو وكيل يقف أمام الكائن للتحكم فيه (مثل التحقق من الصلاحيات Security Proxy أو التحميل الكسول Lazy Loading أو حماية الاتصال عن بعد Remote Proxy).
مثال بالكود
// Decorator: نفس الواجهة + سلوك إضافي
class LoggingNotifier implements Notifier {
constructor(private inner: Notifier) {}
send(msg: string) { console.log('Log'); this.inner.send(msg); }
}أخطاء شائعة
- استخدام نمط Adapter لتعديل سلوك الكائن، في حين أن مهمته الوحيدة هي ترجمة الواجهات دون المساس بالسلوك الأصلي.