Está en la página 1de 13

OBSERVER

• Define una dependencia entre


objetos, de manera que cuando un
objeto cambie su estado, se informe y
se actualicen automáticamente los
demás objetos que dependen de él
• Este patrón de diseño permite
reaccionar a ciertas clases llamadas
observadores sobre un evento
determinado.

DISEÑO DE SISTEMAS
OBSERVER: ESTRUCTURA

DISEÑO DE SISTEMAS
OBSERVER: ESTRUCTURA
Subject
conoce sus observadores. Un Sujeto (Subject) puede ser observado por
cualquier número de objetos Observer.Proporciona una interfaz para conectar
y desconectar los objetos Observer.

ConcreteSubject
Almacena el estado de interés del ConcreteObserver . Envía una notificación
a los observadores cuando hay cambios de estado

Observer
Define una interfaz de actualización de los objetos que deben ser notificados
de cambios en el Subject

ConcreteObserver
Mantiene una referencia a un objeto de ConcreteSubject.
Almacena el estado que debería permanecer consistente con el Subject
Implementa el Observador (Observer) actualizando la interfaz para mantener
su estado consistente con el Subject
DISEÑO DE SISTEMAS
OBSERVER

Ejemplo

DISEÑO DE SISTEMAS
OBSERVER
• La única cosa que el objeto Sujeto conoce en relación al objeto
observador, es que este implementa una determinada interface.
• El objeto Sujeto es único, y cambia de estado cada vez que recibe una
nueva información sobre los cambios de temperatura, humedad y presión
y debe remitir este objeto a Observadores que generalmente son de
estructura diferente, por lo tanto la información debe mandarse a una
interface que los nuclee.
• Se puede agregar nuevos objetos Observadores en cualquier momento,
ya que el objeto Sujeto mantiene una lista de que implementa la interface
Observer, pudiéndose agregar todos los objetos Observadores que se
deseen. Lo mismo sucede con los objetos Observadores que necesitan
ser dados de baja.
• Los Observadores deben requerir ser dados de baja en la lista del Sujeto
y también cuando en ella no están, y quieren estar, deben requerir al
Sujeto que los incorpore.

DISEÑO DE SISTEMAS
OBSERVER
• No se necesita modificar el objeto Sujeto, cuando se agregan nuevos tipos
de objetos Observadores, sólo se debería adicionar el nuevo tipo en la
lista del objeto Sujeto, e implementar el nuevo tipo de clase a la interface
Observer.
• Los Observadores son dependientes del Sujeto, en función, de que recién,
cuando el Sujeto les notifique el nuevo estado, recién los Observadores
podrán expresar sus diferentes formas de expresión, sobre un mismo
estado del objeto Sujeto.
• El que se agregue nuevos Observers no altera, ni modifica en nada el
comportamiento tanto del Sujeto como de los anteriores Observers.
• Se puede reusar objetos Sujetos o Observadores sin que ninguno afecte
al otro; jamás habrá interferencia entre ellos…. esto se debe a que están
débilmente acoplados.
• Los cambios en uno, (cualesquiera fuera), jamás afectarán al otro.

DISEÑO DE SISTEMAS
OBSERVER

Vamos a suponer un ejemplo de una


Biblioteca, donde cada vez que un lector
devuelve un libro se ejecuta el método
devuelveLibro(Libro libro) de la clase
Biblioteca.
Si el lector devolvió el libro dañado
entonces la aplicación avisa a ciertas clases
que están interesadas en conocer este
evento:

DISEÑO DE SISTEMAS
OBSERVER

class Patron Observ er

Biblioteca Libro

+ devuelveLibro() : void

La biblioteca dispara un evento si se


devuelve en mal estado

DISEÑO DE SISTEMAS
OBSERVER

Cada clase que quiera observar el cambio


de estado del libro deberá implementar la
interface iLibroMalEstado
class Patron Observ er

«interface»
iLibroMalEstado
+ update() : void

Administracion Compras Stock

+ update() : void + update() : void + update() : void

DISEÑO DE SISTEMAS
OBSERVER
Entonces ya tenemos los observadores…
Falta el sujeto que avisará a los
observadores:

class Patron Observ er

«interface» «interface»
Subject iLibroMalEstado
agregar_observador() : void observer update() : void
+ +
+ eliminar_observador() : void
+ notificar() : void

AlarmaLibro
Administracion Compras Stock
+ agregar_observador() : void
+ eliminar_observador() : void + update() : void + update() : void + update() : void
+ notificar() : void

DISEÑO DE SISTEMAS
OBSERVER

DISEÑO DE SISTEMAS
OBSERVER

La biblioteca dispara un evento si se


devuelve en mal estado

DISEÑO DE SISTEMAS

También podría gustarte