Observer Pattern en sistemas de eventos
Clase 23 de 27 • Curso de Patrones de Diseño y SOLID en Python
Contenido del curso
Principios SOLID
- 2

Principio de responsabilidad única en SOLID
05:59 min - 3

Refactorizando código Python con principios SOLID
11:14 min - 4

Cómo aplicar SRP en un procesador de pagos con Stripe
25:19 min - 5

Open Closed Principle: extensión sin modificación
02:39 min - 6

Cómo usar clases abstractas en Python
14:46 min - 7

Principio de Liskov en S.O.L.I.D.
03:18 min - 8

Principio de sustitución de Liskov en Python
06:38 min - 9

Interface Segregation: cuándo separar contratos
02:33 min - 10

Segregación de interfaces en procesadores de pagos
09:05 min - 11

Principio de inversión de dependencias explicado
04:13 min - 12

Principio de inversión de dependencias: servicio de pagos flexible
05:56 min
Reestructuración del proyecto
Patrones de Diseño
- 14

Qué son los patrones de diseño: definición y categorías
03:54 min - 15

Strategy Pattern con Python y setprocessor
01:55 min - 16

Strategy Pattern para pagos en Python
10:58 min - 17

Factory Pattern: centralizar creación de objetos
03:05 min - 18

Patrón Factory para procesar pagos con match
11:06 min - 19

Patrón Decorator en 5 pasos para funcionalidad dinámica
03:06 min - 20

Patrón decorador en servicios de pagos
12:57 min - 21

Builder Pattern: construcción paso a paso
01:28 min - 22

Builder pattern para servicios de pagos
18:55 min - 23

Observer Pattern en sistemas de eventos
Viendo ahora - 24

Observer en sistemas de pagos con Python
11:11 min - 25

Chain of Responsibility para validar pagos
02:04 min - 26

Chain of Responsibility en servicios de pagos
16:27 min - 27

Arquitectura robusta para procesadores de pago
03:19 min
Aprende a aplicar el Observer Pattern para lograr gestión flexible de suscripciones y actualización automática ante eventos. Ideal cuando necesitas un servicio de notificación en sistemas con múltiples receptores, con una estructura clara: manager, listeners y un método update que centraliza la reacción a cambios.
¿Qué es el patrón observer y para qué sirve?
El Observer Pattern es un patrón de diseño de comportamiento que resuelve la notificación de eventos a múltiples interesados sin acoplarlos entre sí. Se utiliza para implementar un servicio de eventos simple y efectivo, ampliamente adoptado por su practicidad y facilidad.
¿Cómo se organiza la arquitectura con listeners y manager?
- Clase manager: agrega, remueve y notifica a todos los listeners.
- Interfaz listener: define el método update(evento: cualquier tipo).
- Implementaciones de listener: servicios como email y login que reaccionan en su método update.
- Clase principal: incluye al manager como atributo; por ejemplo, un servicio de pagos que llama a notifyAll cuando hay que notificar.
¿Cuándo aplicarlo en sistemas de eventos?
Se recomienda cuando:
- Un cambio debe notificar a múltiples objetos de forma automática.
- Se implementa un sistema de eventos con receptores independientes.
- Se necesitan mecanismos de suscripción y notificación simples y claros.
¿Qué beneficios inmediatos aporta?
- Gestión flexible de suscripciones y receptores.
- Actualización automática ante nuevos eventos.
- Simplicidad en la integración de nuevos listeners.
¿Cómo implementarlo paso a paso?
Aplica esta secuencia mínima:
- Define una interfaz Listener con un método de notificación: update(evento).
- Crea una clase manager que gestione listeners: agregar, remover y notifyAll.
- Agrega el manager como atributo de la clase de alto nivel (por ejemplo, el servicio de pagos) y úsalo para notificar.
// 1) Interfaz Listener interface Listener { update(event: any): void; } // 2) Clase manager (gestiona suscriptores y notificaciones) class EventManager { private listeners: Listener[] = []; add(listener: Listener): void { this.listeners.push(listener); } remove(listener: Listener): void { this.listeners = this.listeners.filter(l => l !== listener); } notifyAll(event: any): void { this.listeners.forEach(l => l.update(event)); } } // Implementaciones de Listener (servicios que reaccionan al evento) class EmailListener implements Listener { update(event: any): void { // Lógica de notificación por email. } } class LoginListener implements Listener { update(event: any): void { // Lógica relacionada con login. } } // 3) Clase de alto nivel con el manager como atributo (servicio de pagos) class PaymentsService { private manager = new EventManager(); constructor() { this.manager.add(new EmailListener()); this.manager.add(new LoginListener()); } procesarPago(): void { // ... lógica de pago. this.manager.notifyAll(/* evento */ undefined); } }
¿Qué habilidades y conceptos refuerza?
- Uso de interfaces y clases para contratos claros.
- Diseño de sistemas de eventos con suscripción y notificación.
- Implementación de listeners como servicios: email y login.
- Estructuración de una clase de alto nivel con atributo manager y método notifyAll.
¿Has aplicado el patrón Observer en tus proyectos? Compártelo en comentarios y cuéntanos tu caso de uso.