美文网首页
观察者模式

观察者模式

作者: setone | 来源:发表于2018-07-31 18:24 被阅读0次

设计原则:

1.为了交互对象之间的松耦合设计而努力

观察者模式:

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

场景:
气象站需要实时监控数据,数据发生变动的时候就会把参数传递给各个布告板,各个布告板也会有自己的实现方式,同时有可能会添加多个布告板,或者移除布告板
各个对象之间的关系:


image.png

如图所示我们需要的接口和实现类


image.png

1.被观察者
接口Subject.java

public interface Subject {
    /**
     *  @功能:添加观察者
     *  @作者:jh @代号:金花
     *  @时间:2018年7月31日  
     */
    void registerObserver(Observer o);

    /**
     *  @功能:移除观察者
     *  @作者:jh @代号:金花
     *  @时间:2018年7月31日  
     */
    void removeObserver(Observer o);

    /**
     *  @功能:调用方法
     *  @作者:jh @代号:金花
     *  @时间:2018年7月31日  
     */
    void notifyObservers();
}

实现类WeatherData2.java

public class WeatherData2 implements Subject {

    private List<Observer> obs = new ArrayList<>();
    private String temperature;
    private String humidity;
    private String pressure;

    public String getTemperature() {
        return temperature;
    }

    public String getHumidity() {
        return humidity;
    }

    public String getPressure() {
        return pressure;
    }

    public void setTemperature(String temperature) {
        this.temperature = temperature;
    }

    public void setHumidity(String humidity) {
        this.humidity = humidity;
    }

    public void setPressure(String pressure) {
        this.pressure = pressure;
    }

    public void measurementsChanged() {
        notifyObservers(); // 调用
    }

    @Override
    public void notifyObservers() {
        // TODO Auto-generated method stub
        for (Observer observer : obs) {
            observer.update(this);
        }
    }

    @Override
    public void registerObserver(Observer o) {
        // TODO Auto-generated method stub
        obs.add(o);
    }

    @Override
    public void removeObserver(Observer o) {
        // TODO Auto-generated method stub
        obs.remove(o);
    }

}

2.观察者
接口Observer.java

public interface Observer {
    void update(Subject s);
}

实现类CurrentConditionsDisplay.java
DisplayElement接口可有可无

public class CurrentConditionsDisplay implements DisplayElement,Observer{


    /**
     *  @功能:显示天 气预报 
     *  @作者:jh @代号:金花
     *  @时间:2018年7月31日  
     */
    @Override
    public void display(WeatherData2 wd2) {
        // TODO Auto-generated method stub
        Console.json(wd2);
    }

    @Override
    public void update(Subject s) {
        // TODO Auto-generated method stub
        if(s instanceof WeatherData2) {
            WeatherData2 wd2 = (WeatherData2) s;
            Console.json(wd2);
        }
    }

}

3.测试类

public class Test2 {
    public static void main(String[] args) {
        WeatherData2 wd2 = new WeatherData2();
        wd2.setHumidity("35C");
        wd2.setPressure("ppp");
        wd2.setTemperature("mm");
        
        Observer one = new CurrentConditionsDisplay();
        Observer two = new ForecastDisplay();
        Observer three = new StatisticsDisplay();
        Observer four = new ThirdPartyDisplay();
        wd2.registerObserver(one);
        wd2.registerObserver(two);
        wd2.registerObserver(three);
        wd2.registerObserver(four);
        
        wd2.notifyObservers();
        
        Console.log("=======================");
        
        wd2.removeObserver(one);
        wd2.notifyObservers();
    }
}

运行结果


image.png

相关文章

  • 11.9设计模式-观察者模式-详解

    设计模式-观察者模式 观察者模式详解 观察者模式在android中的实际运用 1.观察者模式详解 2.观察者模式在...

  • RxJava基础—观察者模式

    设计模式-观察者模式 观察者模式:观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式...

  • 前端面试考点之手写系列

    1、观察者模式 观察者模式(基于发布订阅模式) 有观察者,也有被观察者。 观察者需要放到被观察者列表中,被观察者的...

  • RxJava 原理篇

    一、框架思想 观察者模式观察者自下而上注入被观察者被观察者自上而下发射事件观察者模式 装饰器模式自上而下,被观察者...

  • 观察者模式

    观察者模式概念 观察者模式是对象的行为模式,又叫作发布-订阅(publish/subscrible)模式。 观察者...

  • 设计模式-观察者模式

    观察者模式介绍 观察者模式定义 观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为...

  • 观察者模式

    观察者模式 观察者模式的定义 观察者模式(Observer Pattern)也叫做发布订阅模式(Publish/s...

  • iOS设计模式之观察者模式

    观察者模式 1、什么是观察者模式 观察者模式有时又被称为发布(publish)-订阅(Subscribe)模式、模...

  • 观察者模式和发布订阅模式区别

    观察者模式 所谓观察者模式,其实就是为了实现松耦合(loosely coupled)。 在观察者模式中,观察者需要...

  • RxJava(二)

    一、观察者模式 1.1、传统的观察者模式 1.2、RxJava 的观察者模式 区别传统的观察者模式是一个 Obse...

网友评论

      本文标题:观察者模式

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