Contenido del curso
Repaso de Conceptos Fundamentales
Cómo funciona JavaScript
Fundamentos Intermedios
Fundamentos Avanzados
APIs del DOM
TypeScript
Patrones de Diseño
- 30

Qué es un patrón de diseño
08:12 min - 31

Categorías de patrones de diseño
04:30 min - 32

Patrón Singleton y Casos de Uso
03:29 min - 33

Implementación del patrón Singleton
04:29 min - 34

¿Cómo funciona el Patrón Observer?
02:36 min - 35

Implementación del patrón Observer
Viendo ahora - 36

Casos de Uso del patrón Observer: Redux
03:18 min - 37

Patrón Decorator y Casos de Uso
08:15 min - 38

Implementación del patrón Decorator
07:38 min
Proyecto: MediaPlayer
Conclusiones
Implementación del patrón Observer
Resumen
¿Cómo implementar el patrón Observer en JavaScript?
El patrón Observer es fundamental para gestionar la comunicación entre objetos en diversas aplicaciones. Implementarlo en JavaScript permite manejar actualizaciones automáticas cuando ciertos eventos tienen lugar. Aquí te mostraré cómo hacerlo de manera eficaz y con ejemplos prácticos.
¿Qué son las interfaces en el patrón Observer?
Antes de adentrarnos en la implementación, necesitamos definir algunas interfaces clave:
- Subject Interface: Esta interface incluirá dos métodos esenciales:
subscribe(observer): que permite agregar un Observador a la lista.unsubscribe(observer): que lo elimina de la lista.
El código correspondiente sería:
interface Subject { subscribe(observer: Observer): void; unsubscribe(observer: Observer): void; }
- Observer Interface: Los objeto que desean recibir notificaciones deben implementar esta interfaz. Incluirá un método para recibir actualizaciones:
interface Observer { update(data: any): void; }
¿Cómo crear una clase concreta que implemente estas interfaces?
Creamos la clase EditPrice, que se encargará de gestionar las notificaciones a los observadores:
class EditPrice implements Subject { private observers: Observer[] = []; subscribe(observer: Observer): void { this.observers.push(observer); } unsubscribe(observer: Observer): void { const index = this.observers.findIndex(obs => obs === observer); if (index >= 0) { this.observers.splice(index, 1); } } notify(data: any): void { this.observers.forEach(observer => observer.update(data)); } }
¿Cómo manejar los cambios de valor para notificar a los Observadores?
Necesitamos capturar cambios en el input y notificar a todos los observadores suscritos. Así se puede gestionar el elemento que cambiará y disparará las notificaciones:
constructor(selector: string) { const element = document.querySelector(selector); element.addEventListener('input', () => { this.notify(element.value); }); }
¿Cómo desplegar la información para los Observadores?
Implementamos un Observador concreto para mostrar los cambios en la interfaz:
class PriceDisplay implements Observer { constructor(private selector: string) { this.element = document.querySelector(selector); } update(data: any): void { this.element.innerText = data; } }
¿Cómo suscribir y manejar dinámicamente las subscripciones?
Finalmente, suscribe el PriceDisplay a EditPrice y maneja cambios dinámicos en las suscripciones:
const price = new EditPrice('#priceInput'); const display = new PriceDisplay('#priceDisplay'); price.subscribe(display); // Desmaterializando la suscripción después de ciertos segundos setTimeout(() => { price.unsubscribe(display); }, 5000);
Inicia tu proyecto y ¡observa cómo el patrón Observer cobra vida en tu aplicación! Cambia el valor en el input y visualiza cómo el PriceDisplay actualiza su información en tiempo real. Si el desarrollo de aplicaciones reactivas te apasiona, sigue explorando herramientas como Redux en React para gestionar estados globales con este patrón. ¡Nunca dejes de aprender y asombrarte con el mundo del desarrollo!