设计模式----观察者模式

来源:互联网 发布:文本编辑 mac 编辑:程序博客网 时间:2024/05/01 09:56

观察者模式 定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

(注册、移除)

类图:





接口:

public interface Subject {public void registerObserver(Object o);public void removeObserver(Object o);public void notifyObservers();}


public interface Observer {public void update(float temp, float humidity, float pressure);}


public interface DisplayElement {public void display();}

类:

import java.util.ArrayList;public class WeatherData implements Subject {private ArrayList observers;private float temperature;private float humidity;private float pressure;public WeatherData(){observers = new ArrayList();}@Overridepublic void registerObserver(Object o) {observers.add(o);}@Overridepublic void removeObserver(Object o) {int i = observers.indexOf(o);if (i >= 0){observers.remove(o);}}@Overridepublic void notifyObservers() {for (int i = 0; i < observers.size(); i++){Observer observer = (Observer) observers.get(i);observer.update(temperature, humidity, pressure);}}public void measurementsChanges(){notifyObservers();}public void setMeasurements(float temperature, float humidity, float pressure){this.humidity    = humidity;this.temperature = temperature;this.pressure    = pressure;measurementsChanges();}//其他方法....}


public class CurrentConditionDisplay implements Observer, DisplayElement {private float temperature;private float humidity;private WeatherData weatherData;public CurrentConditionDisplay(WeatherData w){this.weatherData = w;}@Overridepublic void display() {System.out.println("Current condition: " + temperature + ", " + humidity);}@Overridepublic void update(float temp, float humidity, float pressure) {this.temperature = temp;this.humidity = humidity;display();}}

0 0
原创粉丝点击