تكرار السؤال: …
الإجابة المختصرة
في Observer، يعرف الموضوع (Subject) مراقبيه مباشرة ويحتفظ بقائمتهم في نفس مساحة الذاكرة، بينما في Pub-Sub، يفصل وسيط رسائل خارجي (Message Broker) بين الناشر والمشترك تماماً دون أي معرفة متبادلة.
الشرح
الـ Observer نمط تصميم متزامن داخل نفس التطبيق والذاكرة (In-process)، حيث يستدعي الـ Subject دالة update() في المراقبين مباشرة. أما الـ Pub-Sub فهو نمط معماري للأنظمة الموزعة؛ يرسل الناشر حدثاً إلى وسيط (مثل Kafka أو RabbitMQ أو Redis)، ويقوم الوسيط بتوصيله إلى مئات المشتركين بشكل غير متزامن تماماً، مع فصل كامل في المكان والزمان ومسار التنفيذ.
مثال بالكود
// Observer: ارتباط مباشر في الذاكرة
subject.attach(observer);
subject.notify();
// Pub-Sub: وسيط وسيط وسيط مستقل تماماً
messageBroker.publish('order.created', payload);أخطاء شائعة
- نسيان إلغاء الاشتراك (Unsubscribe) في نمط Observer مما يؤدي لتسريب الذاكرة الشهير المسمى Lapsed Listener Problem.