美文网首页
behavior:观察者模式(Observable)

behavior:观察者模式(Observable)

作者: 柳源居士 | 来源:发表于2019-03-20 00:03 被阅读0次

    通俗易懂的理解:
    出版社+读者=观察者模式
    它有以下几个含义:

    • 出版社负责发行报纸
    • 读者订阅报纸,当有新的报纸发行的时候,它一定会被送到读者手中
    • 当读者不想看报纸的时候,只需要取消订阅就可以了
    • 只要出版社存在,就一直会有读者订阅报纸

    在实现的时候,我们把各自角色重新命名:
    出版社 = 主题(Subject)| 被观察对象(Observable)
    读者 = 观察者(Observer)

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

    类图:


    类图.png

    简单实现:

    package observable;
    
    import java.util.Observable;
    import java.util.Observer;
    
    public class CurrentConditionsDisplay implements Observer,DisplayElement{
    
        Observable observable;
        private float temprature;
        private float humidity;
    
        public CurrentConditionsDisplay(Observable observable) {
            this.observable = observable;
            observable.addObserver(this);
        }
    
        @Override
        public void update(Observable o, Object arg) {
            if(o instanceof WeatherData){
                WeatherData weatherData=(WeatherData)o;
                this.temprature=weatherData.getTemperature();
                this.humidity=weatherData.getHumidity();
                display();
            }
        }
    
        @Override
        public void display() {
            System.out.println("Current conditions: "+temprature + "F degress and "+humidity+"% humidity");
        }
    }
    
    

    package observable;
    
    public interface DisplayElement {
        public void display();
    }
    
    

    package observable;
    
    public class TestObservable {
        public static void test(){
            WeatherData weatherData=new WeatherData();
            CurrentConditionsDisplay currentConditionsDisplay=new CurrentConditionsDisplay(weatherData);
            //主题内容改变,通知观察者
            weatherData.setMeasurements(81,82,80);
        }
    }
    
    

    package observable;
    
    import java.util.Observable;
    
    public class WeatherData extends Observable {
        private float temperature;
        private float humidity;
        private float pressure;
    
        public WeatherData() {
        }
    
        public void measurementsChanged(){
            setChanged();
            notifyObservers();
        }
    
        public void setMeasurements(float temperature,float humidity,float pressure){
            this.temperature=temperature;
            this.humidity=humidity;
            this.pressure=pressure;
            measurementsChanged();
        }
    
        public float getTemperature() {
            return temperature;
        }
    
        public float getHumidity() {
            return humidity;
        }
    
        public float getPressure() {
            return pressure;
        }
    
    }
    

    相关文章

      网友评论

          本文标题:behavior:观察者模式(Observable)

          本文链接:https://www.haomeiwen.com/subject/qpjomqtx.html