تخطَّ إلى المحتوى

Observer

نمط المراقب Observer

Observer يحدد علاقة واحد-إلى-متعدد: عندما يتغير كائن (Subject)، يُشعَر تلقائيًا كل الكائنات المشتركة (Observers) بدون أن يعرف تفاصيلها.

الـ Subject يحتفظ بقائمة مشتركين ويوفّر دوال subscribe/unsubscribe بالإضافة لدالة notify تستدعي كل مشترك عند وقوع حدث. الأساس وراء أنظمة Pub/Sub، وأحداث DOM بالمتصفح، وHooks في React (useEffect يراقب تغيّر قيم محددة).

الصياغة

subject.subscribe(observer);
subject.notify(data); // يستدعي update() على كل مشترك

📄 مثال

class Subject {
  #observers = [];
  subscribe(fn) { this.#observers.push(fn); }
  notify(data) { this.#observers.forEach((fn) => fn(data)); }
}

const priceAlert = new Subject();
priceAlert.subscribe((price) => console.log(`تنبيه: السعر أصبح ${price}`));
priceAlert.notify(99); // تنبيه: السعر أصبح 99

أهم النقاط

النقطةالوظيفة
التصنيفنمط سلوكي (Behavioral)
يحل مشكلةإشعار عدة كائنات بتغيّر حالة كائن آخر دون ربطها ببعضها مباشرة
أمثلة واقعيةEvent Emitters في Node.js، أحداث DOM، Hooks في React

💡 نصائح عملية

  • تذكّر إلغاء الاشتراك (unsubscribe) عند عدم الحاجة — نسيانه سبب شائع لتسريبات الذاكرة (memory leaks)

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار OOP الكامل بالعربي.