美文网首页
简单实现观察者模式

简单实现观察者模式

作者: boyiis | 来源:发表于2022-09-08 11:24 被阅读0次

主题接口

public interface Subject {
    void registerObserver(Observer o);
    void removeObserver(Observer o);
    void notifyObserver();
}

观察者接口

public interface Observer {
    void update(Message message);
}

主题内容类

public class Message {
    public float temperature;
    public float humidity;
    public float pressure;

    public Message(float temperature, float humidity, float pressure){
        this.temperature = temperature;
        this.humidity = humidity;
        this.pressure = pressure;

    }
}

主题实现类

public class WeatherData implements Subject {

    private List<Observer> observers;

    private Message message;


    public WeatherData() {
        observers = new ArrayList<>();
    }

    @Override
    public void registerObserver(Observer o) {
        observers.add(o);

    }

    @Override
    public void removeObserver(Observer o) {
        observers.remove(o);

    }

    @Override
    public void notifyObserver() {
        for (Observer o : observers) {
            o.update(message);
        }
    }

    public void setMeasurments(Message m) {
        this.message = m;
        notifyObserver();
    }
}

观察者实现类

public class CurrentConditionDisplay implements Observer{

    private Subject weatherData;

    public CurrentConditionDisplay(Subject weatherData) {
        this.weatherData = weatherData;
        weatherData.registerObserver(this);
    }

    @Override
    public void update(Message m) {
        System.out.println("当前情况布告板(CurrentConditionDisplay):temperature:"+m.temperature+",humidity:"+m.humidity+",pressure:" + m.pressure);

    }
}

public class ForcastDisplay implements Observer{
    private Subject weatherData;

    public ForcastDisplay(Subject weatherData) {
        this.weatherData = weatherData;
        weatherData.registerObserver(this);
    }

    @Override
    public void update(Message m) {
        System.out.println("当前情况布告板(ForcastDisplay):temperature:"+m.temperature+",humidity:"+m.humidity+",pressure:" + m.pressure);

    }
}

public class StaisticsDisplay implements Observer{
    private Subject weatherData;

    public StaisticsDisplay(Subject weatherData) {
        this.weatherData = weatherData;
        weatherData.registerObserver(this);
    }

    @Override
    public void update(Message m) {
        System.out.println("当前情况布告板(StaisticsDisplay):temperature:"+m.temperature+",humidity:"+m.humidity+",pressure:" + m.pressure);

    }
}

测试执行

public class Command {

    public static void main(String[] args) {

        WeatherData weatherData = new WeatherData();

        CurrentConditionDisplay currentConditionDisplay = new CurrentConditionDisplay(weatherData);
        ForcastDisplay forcastDisplay = new ForcastDisplay(weatherData);
        StaisticsDisplay staisticsDisplay = new StaisticsDisplay(weatherData);

        Message m= new Message(30, 65, 30.5F);
        weatherData.setMeasurments(m);

        System.out.println("_______________________________________________________________");
        m= new Message(31, 66, 30);
        weatherData.removeObserver(currentConditionDisplay);
        weatherData.setMeasurments(m);
    }
}

相关文章

  • RN的传值相关

    观察者模式 通过EventEmitter实现事件机制,实现简单的观察者模式。发送端、接受端同时需要引入Device...

  • iOS KVO观察者模式的深入理解

    谈到KVO我们就会联想到『观察者模式』,其实KVO就是在oc中实现观察者模式。那下面就对观察者做一个简单介绍: 观...

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

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

  • 【设计模式】观察者模式 和 发布订阅模式

    目录:观察者模式发布-订阅模式观察者模式和发布订阅模式的区别实现vue数据双向绑定 (1)观察者模式 (1)概念 ...

  • 观察者模式_20190912(python)

    一、观察者模式介绍 二、观察者模式UML 三、python实现观察者模式(demo1、2) 1、demo1 """...

  • 学习 Vue 中观察者模式

    贴一个 Vue 中源码的观察者模式源码 手动实现观察者模式 观察者模式和订阅发布模式的区别 观察者模式是由具体的目...

  • 简单实现观察者模式

    主题接口 观察者接口 主题内容类 主题实现类 观察者实现类 测试执行

  • 设计模式

    常用的设计模式:单例模式,工厂模式,观察者模式,代理模式,其他的我使用不多。单例模式最常见也最简单分为几种实现:懒...

  • 23种设计模式之观察者模式

    观察者模式底层实现 使用java.util.Observable,java.util.Observer实现观察者模...

  • 十三、模式

    1、用Reflect实现观察者模式

网友评论

      本文标题:简单实现观察者模式

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