¿Que es?
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....
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()...
java también nos proporciona la Clase Observable de la cual extienden las clases o sujetos concretos (los observados), esta clase provee varios métodos importantes como por ejemplo registerObserver(), removeObserver(), notifyObservers() entre otros necesarios para el funcionamiento del patrón, mas adelante en nuestro ejemplo veremos como lo podemos usar.
El Problema.
Nos solicitan desarrollar una paleta de colores donde el usuario1 pueda seleccionar y visualizar el color que le guste, a la vez dicha selección debe ser controlada en tiempo real por el usuario2 y el usuario3 que hacen seguimiento a la selección realizada, el problema radica en que estos usuarios se encuentran en habitaciones distintas y no pueden ver la selección del usuario1...
La Solución.
Aplicaremos el Patrón Observador ya que según la solicitud, los usuarios 2 y 3 deben ser informados de manera automática sobre la selección del usuario1, (esto descarta la posibilidad de que ambos usuarios tengan que refrescar el sistema, pantalla o ventana para estar al tanto del color elegido por el usuario1) de esta forma podríamos definir que el usuario1 sera el observado y los demás los observadores.............sin embargo podemos manipular nuestra solución para que todos tengan ambos roles.
La Aplicación.
Crearemos 3 Ventanas que presentarán las aplicaciones de los usuarios, dichas ventanas implementarán las interfaz Observer, siendo cada una un ObservadorConcreto, tenemos también la ClaseObservador la cual extenderá de la clase Observable siendo así el sujetoConcreto, pero como mencionamos anteriormente vamos a hacer que todas las aplicaciones de los usuarios tengan ambos roles, para esto asociaremos a las clases "Ventanas" con la ClaseObservador mediante instancias de esta ultima y de esta forma nuestras clases Ventanas serán tanto Observadores Concretos como Sujetos Concretos, donde el rol dependerá de la función de cada una...
public class ClaseObservador extends Observable{
private int colorSeleccionado;
private String color;
public ClaseObservador(){
}
public void setColorSeleccionado(int i) {
this.colorSeleccionado = i;
setChanged();
notifyObservers();
}
public int getColorSeleccionado() {
return colorSeleccionado;
}
public void setColor(String color) {
this.color = color;
}
public String getColor() {
return color;
}
}
Clase Principal.
public static void main(String[] args)
{
ClaseObservador observador=new ClaseObservador();
VentanaOpciones miVentanaOpciones=new VentanaOpciones(observador);
VentanaColor miVentanaColor=new VentanaColor(observador);
VentanaSeleccion miVentanaSeleccion=new VentanaSeleccion(observador);
/**Aqui se Agregan los observadores*/
observador.addObserver(miVentanaColor);
observador.addObserver(miVentanaSeleccion);
observador.addObserver(miVentanaOpciones);
}
VentanaColor.
VentanaOpciones.
VentanaSelección.
Representa la aplicación del usuario3, esta ventana a diferencia de las anteriores no posee ninguna opción disponible para el usuario, tan solo cumplirá el rol de ObservadorConcreto, posee una instancia de ClaseObservador mediante la cual estará informando al usuario sobre la opción seleccionada en alguna de las ventanas, todo esto gracias al método update() de la interfaz Observer.
Conclusiones.
Y Listo!!!...............Como vemos el ejemplo es muy básico, no tenemos paquetes ni cosas complejas, solo se busca cumplir con el objetivo de dar a entender la aplicación del patrón Observer, simulamos las ventanas como 3 aplicaciones diferentes, sin embargo este patrón también puede ser combinado con diferentes proyectos para hacer mucho mas real su aplicación.
Referencias.
Head First Design Patterns
Descarga.
En el link de descarga se encuentra el archivo .rar con la aplicación, solo es cuestión de descomprimir y abrir con Eclipse...
Espero que este ejemplo sea de Utilidad y sirva como base para su aplicación en futuros desarrollos ;)
También te podría Interesar.
- Ejemplo Modelo Vista Controlador.
- Que son los Patrones de Diseño ?
- Ejemplo Conectando Java con MySql
- Manejo de Excepciones en Java
- Conceptos Básicos de Programación Orientada a Objetos.
- ¿ String Vrs StringBuffer Vrs StringBuilder ?
- Repositorios y Control de Versiones
- Trabajando con SVN desde Eclipse
- Configuración Ambiente de Desarrollo... Descarga de Eclipse
¿Hay algo que quieras anexar o comentar sobre esta entrada? no dudes en hacerlo....