En la edición anterior hicimos foco en el patrón creacional PROTOTYPE. En esta entrega vamos a indagar en el patrón de comportamiento OBSERVER. Allá vamos!
Como comenté en el artículo introductorio a los patrones de diseño (acá el link), un patrón de comportamiento es aquel que gestiona algoritmos, relaciones y responsabilidades entre objetos.
También vimos que hay 4 elementos que definen un patrón. Así que vamos a utilizarlos para exponer el patrón OBSERVER.
Estos cuatro elementos que lo definen son los siguientes:
1) Nombre: OBSERVER
2) Problema: La dependencia de algunos objetos que quedan atados a la acción o cambio de comportamiento de otro objeto para accionar.
3) Solución: Que el objeto del cual dependen los demás (observado) tenga un listado de ellos (observadores) y les notifique cuando sea necesario. Es decir, en un cambio de estado o acción.
4) Consecuencias:
- Ventajas: La principal ventaja es que proporciona un diseño ligeramente acoplado entre los objetos que interactúan. Esto quiere decir que los objetos no conocen mucho del otro. El observado sólo conoce la interfaz que implementan los observadores, para agregar o quitar observadores no hay que modificar al observado y ambas clases pueden utilizarse de manera independiente (observado y observador).
- Desventajas: La fuga de memoria es gran y capaz que única desventaja. Esto se debe a que para agregar o quitar observadores se tiene que hacer de manera explícita. Aunque no se utilicen más los observadores sigue quedando la referencia para notificarlo y esto hace que el recolector de basura no lo elimine.
Ejemplo
Para que quede más claro no hay nada mejor que algo visual, así que vamos a ver el diagrama de clases:
Como se puede ver, todos los observadores tienen que implementar la interfaz Observador. El método "actualizar" de la interfaz Observador es el que realiza las acciones cuando se le notifica.
El Observado es el encargado de notificar a los observadores cuando tenga un cambio de estado o realice una acción. Esto los va a realizar con el método "notificar" que este termina llamando al método "actualizar" del listado de observadores.
Conclusión
Es importante destacar que si un observador no se va a utilizar más, hay que eliminarlo del listado de observadores que posee el observado. Ya que sino esa memoria no se va a liberar al quedar una referencia al mismo.
Dejando eso de lado, es un patrón de diseño muy fácil de aplicar y que trae muchas ventajas. Para relacionarlo con algo más cercano a la realidad, se puede relacionar con las suscripciones a las noticias de algún sitio. Nuestro correo queda en su lista de observadores y ante alguna novedad está nos notificará.
Cierro con esa observación este artículo y les agradezco por seguir acompañándome en esta serie de artículos sobre patrones de diseño. Saludos!