Skip to content

Instantly share code, notes, and snippets.

@garudareiga
Last active August 29, 2015 14:12
Show Gist options
  • Save garudareiga/31cac1535487dcdbb3de to your computer and use it in GitHub Desktop.
Save garudareiga/31cac1535487dcdbb3de to your computer and use it in GitHub Desktop.
Observer Design Pattern
public interface Subject {
public void registerObserver(Observer o);
public void removeObserver(Observer o);
public void notifyObservers();
}
public interface Observer {
public void update(float temp, float humidity, float pressure);
}
public interface DisplayElement {
public void display();
}
public class WeatherData implements Subject {
private ArrayList<Observer> observers;
private float temp;
private float humidity;
private float pressure;
public WeatherData() {
observers = new ArrayList<Observer>();
}
public void registerObserver(Observer o) { observers.add(o); }
public void removeObserver(Observer o) { observers.remove(o); }
public void notifyObservers() {
for (Observer o : observers)
o.update(temp, humidity, pressure);
}
public void mesurementsChanged() { notifyObservers(); }
public void setMeasurements(float temp, float humidity, float pressure) {
this.temp = temp;
this.humidity = humidity;
this.pressure = pressure;
}
}
public class CurrentConditionsDisplay implements Observer, DisplayElement {
private float temp;
private float humidity;
private Subject WeatherData;
public CurrentConditionsDisplay(Subject WeatherData) {
this.WeatherData = WeatherData;
WeatherData.removeObserver(this);
}
public void update(float temp, float humidity, float pressure) {
this.temp = temp;
this.humidity = humidity;
display();
}
public void display() {
System.out.println("Current conditions: " + temp + "F and " + humidity + "%");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment