主题接口:
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,humidity,pressure;
public WeatherData(){
Observers = new ArrayList<>();
}
@Override
public void registerObserver(observer o) {
Observers.add(o);
}
@Override
public void removeObserver(observer o) {
int i = Observers.indexOf(o);
if (i >= 0){
Observers.remove(i);
}
}
@Override
public void notifyObservers() {
for (int i = 0; i < Observers.size(); i++) {
observer o = Observers.get(i);
o.update(temp,humidity,pressure);
}
}
public void measurementsChanged(){
notifyObservers();
}
public void setMeasurements(float temp,float humidity,float pressure){
this.temp = temp;
this.humidity = humidity;
this.pressure = pressure;
measurementsChanged();
}
}
public class CurrentConditionsDisplay implements observer,DisplayElement {
private float temp,humidity,pressure;
public CurrentConditionsDisplay(){
}
@Override
public void update(float temp, float humidity, float pressure) {
this.temp = temp;
this.humidity = humidity;
this.pressure = pressure;
display();
}
@Override
public void display() {
System.out.println("当前天气:"+temp+"℃ "+humidity+"湿度 "+pressure+"气压");
}
}
主方法类:
public class WeatherStation {
public static void main(String[] agrs){
WeatherData data = new WeatherData();
CurrentConditionsDisplay display = new CurrentConditionsDisplay();
data.registerObserver(display);
data.setMeasurements(25,23,56);
}
}