# Propósito
Establece una relación de suscripción donde los objetos (observadores) son notificados automáticamente de cualquier cambio en el estado de otro objeto (sujeto).
# Problema
-
Acoplamiento Sujeto-Observador: Necesidad de notificar cambios sin que el sujeto conozca las clases concretas receptoras.
-
Actualización Dinámica: Objetos que necesitan monitorear estados que varían en el tiempo.
# Solución
-
Suscripción: Los observadores se registran o desregistran voluntariamente.
-
Notificación Automática: El sujeto itera sus suscriptores y llama a su método de actualización tras un cambio.
# Estructura
# Participantes
- Subject: Interfaz para registro y notificación.
- ConcreteSubject: El objeto de interés con estado cambiante.
- Observer: Interfaz con el método update().
- ConcreteObserver: El suscriptor que reacciona a cambios.
# Cuándo Usarlo
Cuando el cambio en un objeto requiere cambios en otros desconocidos a priori, o cuando la lista de interesados es dinámica.
# Ventajas
-
verified
Desacoplamiento: Sujetos y observadores evolucionan por separado.
-
verified
Broadcast: Notificación simultánea a múltiples clases.
# Desventajas
-
warning
Actualización Innecesaria: Recibir avisos no relevantes.
-
warning
Memory Leak: Si no se desvinculan los suscriptores.
# Ejemplo: Alerta Meteorológica
Estación de clima (Sujeto) que notifica a Apps móviles y servicios de noticias (Observadores).
# Código Java
interface Subject {
void register(Observer o);
void notifyObservers();
}
class WeatherData implements Subject {
private List<Observer> obs = new ArrayList<>();
public void notifyObservers() {
for (Observer o : obs) o.update(temp, hum, press);
}
}
# Mapeo Participantes
- WeatherData: ConcreteSubject.
- MobileApp: ConcreteObserver.
- Service: Client.
# Conclusiones
Es la base de los sistemas reactivos y permite una arquitectura altamente extensible frente a nuevos requerimientos de monitoreo.
# Patrones relacionados
Mediator
Para coordinar comunicación entre objetos complejos.
Singleton
Para asegurar un observador central o un único sujeto global.