Design Patterns - Observer Pattern
Key words: Push vs Poll
UML
Better Design
Pseudo Code
interface IObservable {
public void add(IObserver o); // Register
public void remove(IObserver o); // Deregister
public void notify();
}
interface IObserver {
public void update();
}
class WeatherStation implements IObservable {
public void add(IObserver o) {
this.observers.add(o);
}
public void notify() {
for(IObserver o : this.observers) {
o.update();
}
}
public int getTemperature() {
return this.temperature;
}
}
class PhoneDisplay implements IObserver {
WeatherStation station;
// Sort of dependency injection
public void PhoneDisplay(WeatherStation station) {
this.station = station;
}
public void update() {
// Pull data
int temperature = this.station.getTemperature();
// Update logic goes below
}
}
WeatherStation station = new WeatherStation();
PhoneDisplay display = new PhoneDisplay(station);
station.add(display);
station.notify();