//观察者public interface Observer { public void update(float temp, float humidity, float pressure);}
//观察者行为public interface Displayment { public void display();}
//主题public interface Subject { public void registerObserver(Observer o); public void removeObserver(Observer o); public void notifyObserver();}
//观察者1public class CurrentConditionsDisplay implements Observer, Displayment{ private float temp; private float humidity; private Subject weatherData; public void CurrentConditionsDisplay(Subject weatherData){ this.weatherData = weatherData; } public void display() { System.out.println("Current conditions: " + temp + "F degrees and "+ humidity + " % humidity"); } public void update(float temp, float humidity, float pressure) { this.temp = temp; this.humidity = humidity; display(); }}
//主题相干的实例public class WeatherData implements Subject { private ArrayList observers; private float temperature; private float humidity; private float pressure; public WeatherData(){ this.observers = new ArrayList<Observer>(); } @Override public void registerObserver(Observer o) { observers.add(o); } @Override public void removeObserver(Observer o) { observers.remove(o); } @Override 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 temperature, float humidity, float pressure){ this.temperature = temperature; this.humidity = humidity; this.pressure = pressure; }}
//测试public class WeatherDataTest extends TestCase { public void testRegisterObserver() { WeatherData weatherData = new WeatherData(); weatherData.setMeasurements(23,15,175); CurrentConditionsDisplay currentConditionsDisplay = new CurrentConditionsDisplay();// CurrentConditionsDisplay currentConditionsDisplay = new CurrentConditionsDisplay(weatherData); weatherData.registerObserver(currentConditionsDisplay); weatherData.notifyObserver(); weatherData.removeObserver(currentConditionsDisplay); weatherData.notifyObserver(); }}
//测试后果
Current conditions: 23.0F degrees and 15.0 % humidity