El patrón de diseño Observer o, en español, Observador, es usado cuando necesitamos establecer una relación estrecha entre objetos, en la cual uno de esos objetos debe estar constantemente enterado de los cambios de estado surgidos en el otro. Por su naturaleza es ampliamente usado en la programación dirigida por eventos. Es una relación de uno a varios.
En este patrón tenemos una entidad u objeto (el "Observable" o el "Sujeto") que notificará automáticamente a todos los observadores cuando se efectúe un cambio de estado. Para esto el Observable cuenta con funciones que permiten que las entidades interesadas en estos cambios de estado se suscriban o se desuscriban (si es que esa palabra existe, pero se sobreentiende el significado) para ser notificadas de los cambios en el esto de éste.
Este patrón es un patrón de diseño comportamental o de comportamiento.
Veamos un diagrama UML que nos pueda ilustrar mejor la relación y su implementación:
![]() |
By Gregorybleiker - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=65617132 |
En el diagrama mostrado arriba el Observable es llamado el "Sujeto", y es éste el que irá cambiando de estado y notificando a los interesados en esos cambios cada vez que sucedan. Las tres funciones básicas que debemos implementar en este sujeto serían:
- registerObserver (observer): Toma como parámetro un objeto de la clase Observer y lo añade a una lista dentro del sujeto, ésta lista (llamada observerCollection en el ejemplo) será la que almacenará la lista completa de observadores interesados en los cambios de estado del sujeto.
- unregisterObserver (observer): Se le pasa como parámetro el observador que queremos sacar de la lista de observadores, por lo tanto éste observador ya no será notificado de los cambios de estado que sucedan en el sujeto.
- notifyObservers ( ): Este método no recibe parámetros, y será el método llamado cuando dentro del sujeto suceda un cambio que deba ser notificado (pues no todos los cambios que ocurran en el sujeto son de interés para los observadores), este método lo único que hará será iterar sobre la lista de observadores y en cada uno invocar la función encargada de "hacer algo" con el nuevo estado del sujeto (función normalmente llamada update ( )).
Dentro de la clase Observer solo es necesario una función para implementar este patrón de diseño, y la mencionamos por encima en el último item de las funciones implementadas por el Sujeto. Esta función es llamada update ( ) se encarga de tomar el nuevo estado del sujeto (una forma es teniendo una referencia de la instancia del sujeto en su constructor, o sea un atributo donde esté almacenado el sujeto para poder acceder a él) y realizando las acciones pertinentes dependiendo del problema que estemos resolviendo.
No hay comentarios:
Publicar un comentario