Código Observer
interface Sujeto {
	public void nuevoObserver(Observer o);
	public void quitarObserver(Observer o);
	public String getEstado();
	public void setEstado(String estado);
}

interface Observer {
	public void actualizar(Sujeto s);
}

class ObserverImpl implements Observer {
	private String estado = "";

	public void actualizar(Sujeto s) {
		estado = s.getEstado();
		System.out.println("Actualización recibida del sujeto, nuevo estado: " + estado);
	}
}

class SujetoImpl implements Sujeto {
	private List observers = new ArrayList();
	private String estado = "";
 
	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	notifyObservers();
	}

	public void nuevoObserver(Observer o) {
		observers.add(o);
	}

	public void quitarObserver(Observer o) {
		observers.remove(o);
	}

	public void notifyObservers() {
		Iterator i = observers.iterator();
		while (i.hasNext()) {
			Observer o = (Observer) i.next();
			o.actualizar(this);
		}
	}
}

public class ObserverTest {

	public static void main(String[] args) {
		Observer o = new ObserverImpl();
		Sujeto s = new SujetoImpl();
		s.nuevoObserver(o);
		s.setEstado("NUEVO ESTADO");
	}
}