Permite a un conjunto de objetos registrar dependencias entre objetos, de tal forma que un objeto notificara sus cambios en estado a todos los objetos que dependen de el.
Se necesita notificar a objetos interasados sobre el cambio de el objeto Observado
El diagrama UML se muestra a continuacion
El diagrama UML es el siguiente:
Existe una clase que tiene una cadena de caracteres. Cuando alguien cambie esta cadena via un metodo de acceso, se necesita notificar el cambio a todos los interesados
public class StringBean { .... }See the complete code for StringBean here.
private String _mio; private java.util.Vector _vec ; public StringBean(String s) { _mio =s; _vec = new java.util.Vector(); } public void addObserver(ObserverIF obv) { _vec.addElement(obv); } public String getMio() { return _mio;} public void setMio(String s) { _mio= s; int sz = _vec.size(); for ( int i=0; i < sz ; i++) { ObserverIF observer=(ObserverIF) _vec.elementAt(i); observer.notificar(); } }
La interfase ObserverIF indica el contrato para todos aquellos objetos que se interesen en observar
public interface ObserverIF { .... }See the complete code for ObserverIF here.
public void notificar();
La clase Observador, implementa el metodo notify, a cada observador se le pone un nombre, via el constructor
public class Observer implements ObserverIF { .... }See the complete code for Observer here.
private String _nombre; public Observer(String nombre) { this._nombre = nombre; } public void notificar() { System.out.println(this._nombre+" notificado"); }
El cliente, crea un StringBean, va agregando varios observadores y luego aplica el cambio
public class ObserverCliente { .... }See the complete code for ObserverCliente here.
public static void main(String [] args) { StringBean s= new StringBean("hola mundo"); s.addObserver(new Observer("observador 1")); s.addObserver(new Observer("observador 2")); s.addObserver(new Observer("observador 3")); s.setMio("adios cruel mundo"); }