3. OTRAS FORMAS DE DECIR LO MISMO
Objeto -> Sujeto
Observador -> Observado
EventHandler -> Event
EventListener -> Event
4. ¿CÓMO FUNCIONA?
El sujeto observado:
Añade observadores
Elimina observadores
Notifica a los observadores
(Opcionalmente) Informar del estado actual
El observador:
Realiza la acción al ser notificado
(Opcionalmente) Pregunta por el estado actual
5. BENEFICIOS
Separar clases que interactúan entre sí favoreciendo el
desacoplamiento.
Posibilidad de añadir nuevos observadores sin modificar el código
del observado.
Observar distintos objetos con el mismo observador.
6. TIPOS DE SUJETOS OBSERVABLES
Aquellos que cambian entre estados definidos.
Aquellos que sufren cambios sin tener estados.
7. POR EJEMPLO (I)
Sujetos con estado:
Observar la conexión de datos de una aplicación móvil.
Al cambiar a offline:
Pintamos un aviso al cliente
Guardamos el estado actual
Encolamos las peticiones al servidor
Al cambiar a online:
Borramos el aviso al cliente
Recuperamos el estado anterior
Gestionamos las peticiones encoladas
8.
9. FORMAS DE NOTIFICAR/OBSERVAR
.notify("networkStatusChange") -> .getCurrentNetworkStatus()
.notify("networkOnline")
.notify("networkOffline")
10. POSIBLES PROBLEMAS
Al añadir un observador puede quedarse en un estado incorrecto.
Para ello habría que preguntar por el estado al observado y
ejecutar el código del observador si aplica.
11. POR EJEMPLO (II)
Sujetos sin estado:
Añadir o eliminar un elemento de una colección.
Tenemos una vista que lista los elementos de la colección. Nos
podría interesar observar cada vez que añadimos un elemento
para refrescar la vista añadiendo una nueva fila.
Y lo mismo para eliminar una fila.
12. FORMAS DE NOTIFICAR/OBSERVAR
.notify("elementAdded", element)
.notify("elementAdded") -> .getLastElementAdded()
.notify("elementRemoved", element)
.notify("elementRemoved") -> getLastElementRemoved()
13. RESUMEN
Varios observadores observan a un sujeto.
Las notificaciones de este sujeto pueden estar relacionadas con
cambios de estado, o no.
Hay dos formas de notificar, pull o push.