Observer (patrón de diseño)

Observer (patrón de diseño)
Observer.svg

El patrón Observador (en inglés: Observer) también conocido como "spider" define una dependencia del tipo uno-a-muchos entre objetos, de manera que cuando uno de los objetos cambia su estado, el observador se encarga de notificar este cambio a todos los otros dependientes.

El objetivo de este patrón es desacoplar la clase de los objetos clientes del objeto, aumentando la modularidad del lenguaje, así como evitar bucles de actualización (espera activa o polling).

Este patrón también se conoce como el patrón de publicación-inscripción o modelo-patrón. Estos nombres sugieren las ideas básicas del patrón, que son bien sencillas: el objeto de datos, llamémoslo "Sujeto" a partir de ahora, contiene atributos mediante los cuales cualquier objeto observador o vista se puede suscribir a él pasándole una referencia a sí mismo. El Sujeto mantiene así una lista de las referencias a sus observadores.


Los observadores a su vez están obligados a implementar unos métodos determinados mediante los cuales el Sujeto es capaz de notificar a sus observadores "suscritos" los cambios que sufre para que todos ellos tengan la oportunidad de refrescar el contenido representado. De manera que cuando se produce un cambio en el Sujeto, ejecutado, por ejemplo, por alguno de los observadores, el objeto de datos puede recorrer la lista de observadores avisando a cada uno.


Este patrón suele observarse en los frameworks de interfaces gráficas orientados a objetos, en los que la forma de capturar los eventos es suscribir 'listeners' a los objetos que pueden disparar eventos.

En Java se puede heredar la funcionalidad del patrón Observer de la clase Observable y los observadores pueden implementar la interfaz Observer y por lo tanto redefinir el método update().

Ejemplo

Wikilibros


Un ejemplo sería un programa que leyese del teclado y cada línea se trataría como un evento. Cuando una línea fuere obtenida, se llamaría al método que notificaría a los observadores, tal que todos los observadores fueren avisados de la ocurrencia del evento mediante sus métodos de actualización (update).

A continuación otro ejemplo, escrito en lenguaje Python, muestra este patrón.

class Listener:
     def __init__(self, name, subject):
         self.name = name
         subject.register(self)
 
     def notify(self, event):
         print self.name, "received event", event
class Subject:
     def __init__(self):
         self.listeners = []
 
     def register(self, listener):
         self.listeners.append(listener)
 
     def unregister(self, listener):
         self.listeners.remove(listener)
 
     def notify_listeners(self, event):
         for listener in self.listeners:
             listener.notify(event)
subject = Subject()
listenerA = Listener("<listener A>", subject)
listenerB = Listener("<listener B>", subject)
# El objeto Subject ahora tiene dos "escuchadores" registrados
subject.notify_listeners ("<event 1>")
# La salida obtenida es :
#     <listener A> received event <event 1>
#     <listener B> received event <event 1>

Enlaces externos


Wikimedia foundation. 2010.

Игры ⚽ Нужно решить контрольную?

Mira otros diccionarios:

  • Observer (patrón de diseño) — El patrón Obervador define una dependencia del tipo uno a muchos entre objetos, de manera que cuando uno de los objetos cambia su estado, el observador de encarga de notificar este cambio a todos los otros dependientes …   Enciclopedia Universal

  • Patrón de diseño — Saltar a navegación, búsqueda Los patrones de diseño (design patterns) son la base para la búsqueda de soluciones a problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces. Un patrón de… …   Wikipedia Español

  • El Señor de los Anillos: las dos torres — Para otros usos de este título, véase Las dos torres (desambiguación). The Lord of the Rings: The Two Towers Título El Señor de los Anillos: las dos torres …   Wikipedia Español

  • Modelo Vista Controlador — Un diagrama sencillo que muestra la relación entre el modelo, la vista y el controlador. Nota: las líneas sólidas indican una asociación directa, y las punteadas una indirecta (por ejemplo, patrón Observer). Modelo Vista Controlador (MVC) es un… …   Wikipedia Español

  • AT&T Mobility — Esta página o sección está siendo traducida del idioma inglés a partir del artículo AT T Mobility, razón por la cual puede haber lagunas de contenidos, errores sintácticos o escritos sin traducir. Puedes colaborar con Wikipedia …   Wikipedia Español

  • Kid A — Álbum de estudio de Radiohead Publicación …   Wikipedia Español

  • La Criatura de la Isla de Jekyll — (The Creature from Jekyll Island) es el nombre de una película (1993) y libro (1994) del autor, productor de cine y comentarista político norteamericano G. Edward Griffin,[1] miembro de la John Birch Society[2] [3] y editor contribuidor a The New …   Wikipedia Español

  • Orientación del papel higiénico — Por delante. Por detrás. Existen dos …   Wikipedia Español

  • Festival de Glastonbury — de 2003 Duración 3 días Localización Pilton, Somerset, Inglaterra …   Wikipedia Español

Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”