The observer design pattern is designed to allow one object to be an observer on another. The object to be observed (Observable) must have a way to keep track of the observers, as there may be more than one. The observer must have a known method (via implementing an interface, normally) which is called by the observed object when a change occurs. That method is often called update(Observable o, Object arg), where the arg Object is some object which has information about the change to the Observable. The class java.util.Observable and the interface java.util.Observer provide mechanisms for this behavior.
An example of the Observer Design Pattern follows:
public class Speedometer implements Observer {
private int speed = 0;
public void update(Observable o, SpeedChange data) {
if (data.getSpeed() != speed) {
speed = data.getSpeed();
displaySpeed();
}
}
}
public class DriveShaft extends Observable {
private int driveSpeed = 0;
public DriveShaft(int driveSpeed) {
this.driveSpeed = driveSpeed;
setSpeed(driveSpeed);
}
public void setSpeed(int driveSpeed) {
this.driveSpeed = driveSpeed;
int vehicleSpeed = driveSpeed / 3.14;
setChanged();
notifyObservers(new SpeedChange(vehicleSpeed));
}
public class SpeedChange {
private int newSpeed = 0;
private SpeedChange(int newSpeed) { this.newSpeed = newSpeed; }
public int getSpeed() { return newSpeed(); }
}
}