El Patrón Observador permite que varios objetos se suscriban a un objeto sujeto para recibir notificaciones cuando el estado del sujeto cambia. El sujeto mantiene una lista de observadores y notifica a todos cuando su estado cambia. Los observadores implementan métodos para actualizarse cuando reciben notificaciones del sujeto. Este patrón permite comunicación entre objetos sin acoplamiento estricto y se usa comúnmente en interfaces gráficas.
1. Maestria en Sistemas Computacionales
Diseño Orientado a Objetos
Patron ObservadorPatron Observador
(Pattern Observer)(Pattern Observer)
Expone:
Ing. Fernando Alfonso Casas De la Torre
Catedratico:
Dr. Diego Uribe Agundis
2. Patron ObservadorPatron Observador
INTRODUCCION:
El Patron Observador (Observer) es un patrón de diseño de software que
define una dependencia del tipo uno a muchos entre objetos, de manera que
cuando uno de los objetos cambia su estado, notifica este cambio a todos los
dependientes.
Se trata de un patrón de comportamiento (existen de 3 tipos: creación,
estructurales y de comportamiento), por lo que está relacionado con algoritmos
de funcionamiento y asignación de responsabilidades a clases y objetos.
Los patrones de comportamiento describen no solamente estructuras de
relación entre objetos o clases sino también esquemas de comunicación entre
ellos y se pueden clasificar en función de que trabajen con: clases (método
plantilla) u objetos (cadena de responsabilidad), Comando, iterador recuerdo,
observador, estado, estrategia, visitante).
3. Patron ObservadorPatron Observador
COMPONENTES:
•Subject: conoce a sus observadores y ofrece la posibilidad de añadir y
eliminar observadores. Posee un método llamado attach() (agrega) y otro
detach() (remueve) que sirven para agregar o remover observadores en
tiempo de ejecución.
•Observer: define la interfaz que sirve para notificar a los observadores los
cambios realizados en el Subject.
•SubjectConcreto: almacena el estado que es objeto de interés de los
observadores y envía un mensaje a sus observadores cuando su estado
cambia.
•ObserverConcreto: mantiene una referencia a un SubjectConcreto.
Almacena el estado del Subject (Status- Update) que le resulta de interés.
Implementa la interfaz de actualización de Observer para mantener la
consistencia entre los dos estados
4. Patron ObservadorPatron Observador
COMO FUNCIONA:
•El Objeto De Datos, que se le puede llamar 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.
Sujeto
SujetoConcreto ObservadorConcreto
Observador
5. Patron ObservadorPatron Observador
COMO FUNCIONA:
Esta disposicion provoca 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 utilizarse en los entornos de trabajo de interfaces gráficas
orientados a objetos (Java, Android, etc.), en los que la forma de capturar los
eventos es suscribir listeners a los objetos que pueden disparar eventos al
ver que han ocurrido los cambios que estaban esperando.
Sujeto
Registra Observadores()
RemueveObservadores()
NotificaObservadores()
SujetoConcreto
Registra Observadores() {..}
RemueveObservadores() {..}
NotificaObservadores() {..}
getStatus()
setStatus()
ObservadorConcreto
Update ()
// otros metodos para
Observadores
Observador
Update ()
Observadores (1..n)
Sujeto
6. Patron ObservadorPatron Observador
COMPONENTES:
Este patrón tiene un uso muy concreto: varios objetos necesitan ser notificados
de un evento y cada uno de ellos deciden como reaccionar cuando esta evento
se produzca.
Un caso típico es la Bolsa de Comercio, donde se trabaja con las acciones de
las empresas. Imaginemos que muchas empresas estan monitoreando las
acciones una empresa X.
• Posiblemente si estas acciones bajan,
algunas personas esten interesadas en
vender acciones, otras en comprar, otras
quizas no hagan nada y la empresa X quizas
tome alguna decisión por su cuenta.
• Todos los observadores reaccionan distinto
ante el mismo evento.
7. Patron ObservadorPatron Observador
EJEMPLO:
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
o que deben conocer, este
evento
8. Patron ObservadorPatron Observador
EJEMPLO:
Cada clase que quiera observar el cambio del estado en el libro deberá
implementar la siguiente interface y darle lógica al método update().
Las clases o instancias interesadas en saber el estado del libro devuelto por el
estado de ILibroMalEstado() son: Administracion(), Compras() y Stock().
9. Patron ObservadorPatron Observador
EJEMPLO:
Veamos el Subject. Este determinara a quien notificara el estado de los libros
que llegan. Define la lista activa de suscriptores agregandolos y eliminandolos
de ella y solamente a aquellos autentificados o validos les informara del estado
del sujeto observado o evento…
La clase AlarmaLibro() registra y
actualiza la lista de
observadores del evento y les
notifica a estos cuando hay uno
10. Patron ObservadorPatron Observador
EJEMPLO:
La biblioteca es quién dispara el evento. Seguramente el estado de un libro no
estará en formato String, pero no viene al caso.
Se muestra una corrida de los
programas del ejemplo de la
Biblioteca con un estado o caso
para activar eventos…
11. Patron ObservadorPatron Observador
CONSIDERACIONES
•El Patron Observador permite modificar las clases subjects y las observers
independientemente.
•Permite añadir nuevos observadores en tiempo de ejecución, sin que esto
afecte a ningún otro observador.
•Permite que dos capas de diferentes niveles de abstracción se puedan
comunicar entre sí sin romper esa división.
•Permite comunicación broadcast, es decir, un objeto subject envía su
notificación a todos los observers sin enviárselo a ningún observer en concreto
(el mensaje no tiene un destinatario concreto). Todos los observers reciben el
mensaje y deciden si hacerle caso ó ignorarlo.
•La comunicación entre los objetos subject y sus observadores es limitada: el
evento siempre significa que se ha producido algún cambio en el estado del
objeto y el mensaje no indica el destinatario
12. Patron ObservadorPatron Observador
CONCLUSION:
Básicamente debemos saber que el patrón Observer es un patrón de
comportamiento que permite relacionar diferentes objetos entre si en torno a
uno Principal, así cada vez que este ultimo cambie su estado, los demás
también cambiaran de forma automática....
Podemos decir entonces que dicho patrón se compone de un objeto
observable u Observado (SujetoConcreto) y objetos observadores
(ObservadorConcreto)....
Un Objeto Observable puede tener uno o
mas Observadores, como vemos el
ObservadorConcreto implementa la
interface Observer (propia de Java) la cual
permite informar sobre los cambios en los
objetos observables mediante una llamada
al método update()
13. Patron ObservadorPatron Observador
REFERENCIAS:
HEAD FIRST DESIGN PATTERNS
Erick Freeman
UML Y PATRONES
Craig Larmann
BLOG «Mi granito de Java»
http://migranitodejava.blogspot.mx/search/label/Observer
BLOG «Codigo DejaVu»
http://codejavu.blogspot.mx/2013/06/ejemplo-patron-observer.html
WIKIPEDIA
https://es.wikipedia.org/wiki/Observer_(patr%C3%B3n_de_dise%C3%B1o)
14. Patron ObservadorPatron Observador
(Pattern Observer)(Pattern Observer)
GRACIAS POR SU ATENCIONGRACIAS POR SU ATENCION
Expuso:
Ing. Fernando Alfonso Casas De la Torre
Matricula
M1713019
fernando_casas69@hotmail.com
Maestria en Sistemas
Computacionales
Diseño Orientado a Objetos
Catedratico:
Dr. Diego Uribe Agundis