En este Articulo de Observadores en Java veremos el uso de dos clases: Observable y Observer, las cuales utilizaremos en un ejemplo practico y sencillo para explicar el funcionamiento de estas. Supongamos que tenemos una clase que queremos que sea monitoreada (Observable) por otras clases (Observer) en la arquitectura de tu programa, y que cuando esta clase monitoreada tenga modificaciones estas sean difundidas a las clases que la observan, observadores. Este problema es resuelto por este par de clases (observable y observer) encontradas en el paquete java.util.* el cual facilita esta tarea, asi que vamos a el ejemplo para entender los observadores en java, comencemos…
Requerimientos:
- Algun entorno para programar como eclipse, Netbeans o simplemente un editor de texto como Notepad ++
Desarrollo
Para comenzar vamos a describir un poco las clases de java que utilizaremos:
Esta interfaz se implementa para ser notificado de cambios sobre un objeto observable.
Esta interfaz luce de la siguiente manera una vez implementada:
package jonathanmelgoza.com.blog;
import java.util.Observable;
import java.util.Observer;
/**
*
* @author Jonathan
*/
public class Observador implements Observer{
@Override
public void update(Observable o, Object arg) {
}
}
Esta clase representa un objeto que puede ser observado o monitoreado de acuerdo al paradigma modelo-vista, representa un objeto que la aplicacion quiere observar y ser notificada de cambios, un objeto observable puede ser observado por uno o mas observadores. Despues de que ub objeto observable produce cambios entonces se llama al metodo notifyObservers que causa que todos los observadores sean notificados de el cambio llamando a su metodo update.
Ahora que conocemos las clases involucradas para manejar observadores en java vamos a realizar un sencillo ejemplo.
La estructura de el ejemplo es la siguiente:

donde:
Main -> Es la clase principal donde se inicializan los objetos y agregamos el observador al observado
Observado -> Es la clase que sera monitoreada
Observador -> Es la clase que monitorizara la clase observada.

¿Necesitas aprender algo nuevo ? Ve a Udemy, busca el tema del que quieres aprender, selecciona el curso para ti y continua con tu aprendizaje.
UdemyEl codigo de la clase que sera monitoreada llamada Observado que hereda de Observable
package jonathanmelgoza.com.blog;
import java.util.Observable;
/**
*
* @author Jonathan
*/
public class Observado extends Observable{
String mensaje;
public Observado(){
mensaje = "Objeto Observado Iniciado";
}
public void cambiarMensaje(String m){
mensaje = m;
//Marcamos el objeto observable como objeto que ha cambiado
setChanged();
//Notificamos a los observadores y le enviamos el nuevo valor
notifyObservers(mensaje);
//notifyObservers(); Este metodo solo notifica que hubo cambios en el objeto
}
}
El codigo de la clase que monitorizara la clase observada llamada Observador que implementa Observer
package jonathanmelgoza.com.blog;
import java.util.Observable;
import java.util.Observer;
/**
*
* @author Jonathan
*/
public class Observador implements Observer{
@Override
public void update(Observable o, Object arg) {
System.out.println("Nueva Actualizacion: "+o+" -> "+arg);
}
}
Ahora el codigo de la clase Main que inicializara los objetos y agregara el observador al objeto observado
package jonathanmelgoza.com.blog;
/**
*
* @author Jonathan
*/
public class Main {
public static void main(String args[]){
Observado observado = new Observado();
Observador observador = new Observador();
observado.addObserver(observador);
observado.cambiarMensaje("Cambio 1");
observado.cambiarMensaje("Cambio 2");
observado.cambiarMensaje("Cambio 3");
}
}
Ahora ejecutamos y observamos que se recibieron 3 actualizaciones al modificar 3 veces el objeto observado.
