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");
}