Why this matters
When you place an order, the system must send a confirmation email, reserve inventory, and record an analytics event. The naive approach puts all three calls inside place_order(). Adding a fourth reaction — say, a Slack notification — requires editing the order service. The Observer pattern inverts this: the order service emits one event, and any number of subscribers react independently. The service stays stable while capabilities grow by subscription.
Cuando colocas un pedido, el sistema debe enviar un correo de confirmación, reservar inventario y registrar un evento de analytics. El enfoque ingenuo pone las tres llamadas dentro de place_order(). Añadir una cuarta reacción — digamos, una notificación de Slack — requiere editar el servicio de pedidos. El patrón Observer invierte esto: el servicio de pedidos emite un evento, y cualquier número de suscriptores reacciona de forma independiente. El servicio permanece estable mientras las capacidades crecen por suscripción.
Real-world formsFormas del mundo real
Browser DOM events, Node.js EventEmitter, domain events in DDD, message brokers (RabbitMQ, Kafka), and reactive streams (RxJS, Python's asyncio subjects) are all Observer at heart. The pattern scales from in-process callbacks to distributed event buses — the core idea stays the same: producers and consumers share only a contract (the event type), not an implementation.
Los eventos del DOM del navegador, EventEmitter de Node.js, los eventos de dominio en DDD, los brokers de mensajes (RabbitMQ, Kafka) y los streams reactivos (RxJS, asyncio subjects de Python) son todos Observer en esencia. El patrón escala desde callbacks en proceso hasta buses de eventos distribuidos — la idea central permanece igual: productores y consumidores comparten solo un contrato (el tipo de evento), no una implementación.
💡 Key takeaway
When one event triggers multiple unrelated reactions, Observer prevents the source from knowing all its consequences — new reactions are added as new subscribers, never as edits to the source.
Cuando un evento desencadena múltiples reacciones no relacionadas, Observer evita que la fuente conozca todas sus consecuencias — las nuevas reacciones se añaden como nuevos suscriptores, nunca como ediciones a la fuente.