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.