Blog de informática: programación, internet, php, wordpress, zend framework, mysql, windows, mootools, linux,…
El patrón Observador es un patrón fácil de entender, y fácil de ver cuando se necesita. Esta clasificado como un patrón de comportamiento.
El contexto de este patrón es cuando tenemos varios objetos observadores y un objeto observado por los observadores. Los observadores necesitan saber cuando se produce un cambio en el objeto observado. El primer planteamiento que se puede pensar, es que haya un proceso/thread/tarea/… que se encargara de que los observadores vayan haciendo peticiones periódicamente el estado del objeto observado, para así detectar cuando sucede el cambio.
El problema surge cuando el intervalo entre petición es muy corto, o hay demasiados objetos observadores haciendo peticiones al objeto observado, o es necesario que el observador sea notificado inmediatamente después del cambio del objeto observado.
La solución que se aplicaría usando el patrón Observador, trata de que los objetos observadores se añadan a una lista de objetos, y el objeto observado notificará el cambio a todos los objetos de esta lista cuando se produzca el cambio. De esta manera, se produce un cambio de papeles: el observador que tenía la tarea de estar pendiente del cambio, ahora esta a la espera de que el observador le avise. Vamos a intentar detallarlo:
Bajando al lenguaje de programación, se puede conseguir esta relación con una interface y una clase abstracta:
Ahora, solo debemos heredar y implementar, personalizando según nuestras necesidades. El esquema UML resultante sería similar al siguiente:
El resultado final, es que los objetos observadores no hacen ninguna petición mientras nada cambie. Cuando se produce un cambio, son notificados de que se ha producido el cambio. La función notify() del objeto observador se puede programar de dos maneras:
Ya depende del contexto. Se ve claramente que la primera opción requiere de una petición extra.
Actualización 2010-02-03: Añado un diagrama de secuencia del proceso en que dos observadores se añaden a la lista de objetos del observado, y después son avisados.
No hay entradas relacionadas.
Este blog informático pretende ser un blog de notas o portafolio de información variada: trozos de código, descubrimientos, notas sueltas, ... Para tenerla a mano, y ser compartida.