设计模式之观察者模式

来源:互联网 发布:淘宝助手宝贝模板 编辑:程序博客网 时间:2024/06/15 11:52

设计模式之观察者模式

观察者模式的特点:定义了对象之间的一对多的依赖。

图什么的我就不太想画了。

简单说的是-找一个对象放置容器,容器放置实现某类接口的对象,当对象内容变化的时候同时调用容器里面对象对应的方法

大家可以理解为报纸订阅。报社和读者之间的对应关系

观察者模式的实现

当然你也可以使用实现java.util.observablejava.util.observer;
package design_partner;import java.util.ArrayList;import java.util.Observer;import org.omg.CORBA.PUBLIC_MEMBER;public class TestObserver {    public static void main(String[] argv){        System.out.println("start:observer");        WeatherData weatherData = new WeatherData();        CurrentConditionDisplay conditionDisplay = new CurrentConditionDisplay(weatherData);        weatherData.setMeasurements(80, 65, 30.4f);        weatherData.setMeasurements(82, 70, 29.2f);        weatherData.setMeasurements(78, 90, 29.4f);    }}interface Subject{    public void registerObserver(MyObserver o);    public void removeObserver(MyObserver o);    public void notifyObservers();}interface MyObserver{    public void update(float temp,float humidity,float pressure);}interface DisplayElement{    public void display();}class WeatherData implements Subject{    private ArrayList<MyObserver> observers;    private float temperature;    private float humidity;    private float pressure;    public WeatherData() {        observers = new ArrayList<MyObserver>();    }    public void registerObserver(MyObserver o){        observers.add(o);    }    public void removeObserver(MyObserver o){        int i = observers.indexOf(o);        if(i>=0){            observers.remove(i);        }    }    public void notifyObservers(){        for(int i=0;i<observers.size();++i){            MyObserver observer = (MyObserver) observers.get(i);            observer.update(temperature, humidity, pressure);        }    }    public void measurementsChanged() {        notifyObservers();    }    public void setMeasurements(float temp,float humidity,float pressure) {        this.temperature = temp;        this.humidity = humidity;        this.pressure = pressure;        measurementsChanged();    }}class CurrentConditionDisplay implements MyObserver,DisplayElement{    private float temperature;    private float humidity;    private Subject weatherData;    CurrentConditionDisplay(Subject weatherData){        this.weatherData = weatherData;        weatherData.registerObserver(this);    }    public void update(float temperature,float humidity,float pressure){        this.temperature = temperature;        this.humidity = humidity;        display();    }    public void display(){        System.out.println("current conditions:"+temperature+"F degress and "+            humidity+" %humidity");    }}
0 0
原创粉丝点击