Patrones Comportamiento_Observer

Patrón Observer

Define una dependencia 1:M entre objetos para que cuando uno cambie su estado, a todos sus dependientes les sea notificado el cambio y se actualicen automáticamente.

Motivación

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

Estructura
Participantes

Subject: Conoce a sus observadores, que pueden ser un número arbitrario. Proporciona una interfaz para añadir y quitar objetos observadores.
Observer: Define la interfaz de los objetos a los que se debe notificar cambios en un sujeto.
ConcreteSubject: Almacena el estado de interés para sus observadores. Envía notificaciones a sus observadores cuando su estado cambia.
ConcreteObserver: mantiene una referencia a un ConcreteSubject, almacena el estado del sujeto que le resulta de interés, implementa Observe para mantener su estado consistente con el sujeto.

Consecuencias
  • Permite modificar sujetos y observadores de manera independiente.
  • Reutilizar un sujeto sin reutilizar sus observadores, y viceversa.
  • Añadir observadores sin tener que cambiar el sujeto ni los demás observadores.
  • Acoplamiento abstracto entre el sujeto y el observador. El sujeto no sabe la clase concreta de sus observadores (acoplamiento mínimo).
  • Soporte para broadcast. El sujeto envía la notificación a todos los observadores suscritos. Se pueden añadir/quitar observadores.
  • Actualizaciones inesperadas. Una operación en el sujeto puede desencadenar una cascada de cambios en sus observadores. El protocolo no ofrece detalles sobre lo que ha cambiado.
Patrones relacionados

Adapter: El patrón Adapter puede ser utilizado para permitir a los objetos que no implementen el interface requerido participar en el patrón Observer para recibir notificaciones.
Delegation: El patrón Observer utiliza el patrón Delegation.
Mediator: El patrón Mediator es utilizado algunas veces para coordinar cambios de estado inicializados por múltiples objetos a un objeto Observable.

No hay comentarios:

Publicar un comentario