Java Built-In Observer Pattern
Java Built-In Observer Pattern
Part 3
Java Built-in Observer Pattern
Java Built-in Observer
Pattern
• Java has several built-in observer pattern
• java.util
• Subject/Observable: java.util.Observable
• http://developer.classpath.org/doc/java/util/Observable-source.html
• Observer: java.util.Observer
• http://developer.classpath.org/doc/java/util/Observer-source.html
• They are similar to our Subject & Observer, but give a lot of already built-in
functionalities
• In the observer you can choose push or pull for the update
Weather app Using Java-
built-in observer pattern
public WeatherData() { }
setChanged();
this.temperature = temperature;
this.humidity = humidity;
this.pressure = pressure;
measurementsChanged();}
//getter methods
}
Concrete Subject (WeatherData)
Using Java Built-in Observable
import java.util.Observable;
observers
private float humidity;
manage observers
setChanged();
notifyObservers();}
this.temperature = temperature;
this.pressure = pressure;
}
Concrete Subject (WeatherData)
Using Java Built-in Observable
import java.util.Observable;
setChanged();
measurementsChanged();}
//getter methods
}
Concrete Subject (WeatherData)
Using Java Built-in Observable
import java.util.Observable;
observers
public WeatherData() { }
notifyObservers();}
notify method
this.temperature = temperature;
this.humidity = humidity;
this.pressure = pressure;
}
Concrete Observer (Display)
Using Java Built-in Observer
import java.util.Observable;
import java.util.Observer;
Observable observable;
this.observable = observable;
this.temperature = weatherData.getTemperature();
this.humidity = weatherData.getHumidity();
display();}}
}
Concrete Observer (Display)
Using Java Built-in Observer
import java.util.Observable;
import java.util.Observer;
constructor
this.humidity = weatherData.getHumidity();
display();}}
}
Concrete Observer (Display)
Using Java Built-in Observer
import java.util.Observable;
import java.util.Observer;
this.observable = observable;
is of type WeatherData
observable.addObserver(this);}
• Use the getter methods in the public void update(Observable obs, Object arg) {
variables values
WeatherData weatherData = (WeatherData) obs;
this.temperature = weatherData.getTemperature();
this.humidity = weatherData.getHumidity();
}
Notes on the Java built-in
Observable class
• Defined as a class