lunes, 8 de julio de 2013

8.1.8 Patrón de comportamiento Observer.

Propósito

  • Define una dependencia de uno-a-muchos entre objetos de forma que, cuando un objeto cambia de estado, se notifica a los objetos dependientes para que se actualicen automáticamente.
  • También conocido como dependents, publish-subscribe.

Motivación
  • Mantener la consistencia entre objetos relacionados, sin aumentar el acoplamiento entre clases
  • Ej: separación de la capa de presentación en una interfaz de usuario de los datos de aplicación subyacentes.

Aplicabilidad

Usa el patrón Observer:


o Cuando una abstracción tiene dos aspectos, y uno depende del otro. Encapsular los aspectos en objetos distintos permite cambiarlos y reutilizarlos.
o Cuando cambiar un objeto implica cambiar otros, pero no sabemos exactamente cuántos hay que cambiar.


o Cuando un objeto debe ser capaz de notificar algo a otros sin hacer suposiciones sobre quiénes son dichos objetos. Esto es, cuando se quiere bajo acoplamiento.

Estructura.

Participantes


Subject:

o conoce a sus observadores, que pueden ser un número arbitrario.
o proporciona una interfaz para añadir y quitar objetos observadores
 Observer:

o define la interfaz de los objetos a los que se deben notificar cambios en un sujeto

ConcreteSubject:

o almacena el estado de interés para sus observadores.
o envía notificaciones a sus observadores cuando su estado cambia
 ConcreteObserver:

o mantiene una referencia a un ConcreteSubject
o almacena el estado del sujeto que le resulta de interés
o implementa la interfaz de Observer para mantener su estado consistente con el del sujeto

Implementación

Correspondencia entre sujetos y observadores

o Usualmente, el sujeto guarda una referencia a sus observadores y esto resulta costoso si hay muchos sujetos y pocos observadores.
¿Quién dispara la actualización llamando a notify?
o El sujeto desde aquellos métodos que cambian su estado.
§ ventaja: las clases cliente no tienen que hacer nada.
§ inconveniente: no es óptimo si hay varios cambios de estado seguidos.

o Las clases cliente.
§ ventaja: se puede optimizar llamando a notify tras varios cambios.


§ inconveniente: los clientes tienen la responsabilidad de llamar a notify.

Referencias perdidas a sujetos que se han eliminado.

o Se puede evitar notificando la eliminación del sujeto a sus observadores.
o En general, eliminar los observadores del sujeto eliminado no es una opción.

Observer en java.

No hay comentarios.:

Publicar un comentario