Observer
Observer
Observer Pattern
Example:
We consider that we have to create weather
data object to update three displays for current
condition, weather stats ,and a forecast.
The system must be expendable – other
developer can create new custom display
elements and users can add or remove as
many display elements as they want.
Observer Pattern(continues…)
WeatherData
getTemperature()
getHumidity()
getPressure()
measurementsChanged()
//other methods
Figure:-WeatherData object
Observer Pattern(continues…)
Wrong Implementation
public class WeatherData
{
}
Observer Pattern (continues…)
<<Subject>> <<Observer>>
Register(observer 0);
display ( );
Notification( );
Remove(observer 0)
WeatherData
Current Forecast
display ( ); display ( );
Observer Pattern(continues…)
weather(1)
public class WeatherData implements Subject
subject {
public interface Subject { private ArrayList observers;
public void registerObserver(Observer o); private float temperature;
public void removeObserver(Observer o); private float humidity;
public void notifyObservers(); private float pressure;
} public WeatherData() {
observers = new ArrayList();
}
public interface Observer { public void registerObserver(Observer o) {
public void update(float temp, float humidity, float observers.add(o);
pressure);
} }
public void removeObserver(Observer o) {
Int i = observers.indexOf(o);
public interface DisplayElement { if (i >= 0) {
public void display(); observers.remove(i);
} }
}
Observer Pattern(continues…)