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 الكامل بالعربي.