A Design Pattern useful for when we want changes in one object to modify many other objects. Observer objects monitor a subject for changes, and will update themselves accordingly.

Example

public Subject(){
	ArrayList<Observers> observers;
	public Subject(){
		observers = new ArrayList<Observers>();
	}
	public registerObserver(Observer o){
		observers.push(o);
	}
 
	public int getState(){
		return state;
	}
	public void setState(int value){
		state = value;
		notifyAllObservers();
	}
	public notifyAllObservers(){
		for (obsever : observers){
			observer.update();
		}
	}
}
 
abstract class Observer{
	Subject subject;
}
 
class ObserverA extends Observer{
	public ObserverA(Subject s){
		subject = s;
		subject.registerObserver(this);
	}
	public void update(){
		System.out.println("A observed", + subject.getState());
	}
}