例子代码如下,代码未加注释,初学者可以在理解的过程中自己添加,加深理解。仅供参考,欢迎共享宝贵意见
(1)
public interface Subject {
public void registerObserver(Observer o);
public void removeObserver(Observer o);
public void notifyObserver();
}
(2)
public interface Observer {
public void update(float temp,float humidity,float pressure);
}
(3)
public interface DisplayElement {
public void display();
}
(4)
public class CurrentConditionDisplay implements Observer,DisplayElement{
private Subject weatherData;
private float temperature;
private float humidity;
private float pressure;
public CurrentConditionDisplay(Subject wd){
this.weatherData = wd;
weatherData.registerObserver(this);
}
public void update(float temp,float humidity,float pressure){
temperature = temp;
this.humidity = humidity;
this.pressure =pressure;
display();
}
public void display(){
System.out.println("Current conditations:"+temperature+" F degrees"+
humidity+"% humidaty "+pressure);
}
}
(5)
import java.util.ArrayList;
public class WeatherData implements Subject{
private ArrayList<Observer> observers;
private float temperature;
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) {
int i = observers.indexOf(o);
if(i>=0)
observers.remove(i);
}
public void notifyObserver() {
for(int i=0;i<observers.size();i++){
Observer observer = (Observer)observers.get(i);
observer.update(temperature,humidity,pressure);
}
}
public void measurementsChanged(){
notifyObserver();
}
public void setMeasurements(float temp,float humidity,float pressure){
this.temperature = temp;
this.humidity = humidity;
this.pressure = pressure;
measurementsChanged();
}
}
(6)
public class weatherStation {
public static void main(String[] args){
WeatherData wd = new WeatherData();
@SuppressWarnings("unused")
CurrentConditionDisplay cdp = new CurrentConditionDisplay(wd);
wd.setMeasurements(78, 90,29.2f);
wd.setMeasurements(82, 70,30.4f);
wd.setMeasurements(90, 80,22.2f);
}
}