温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java如何实现数据更新和事件通知的观察者模式

发布时间:2023-04-24 16:20:09 来源:亿速云 阅读:105 作者:iii 栏目:开发技术

本篇内容主要讲解“Java如何实现数据更新和事件通知的观察者模式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java如何实现数据更新和事件通知的观察者模式”吧!

介绍

Java观察者模式(也称发布-订阅模式)是一种行为设计模式,用于对象之间的松散耦合,即当一个对象的状态发生变化时,其他依赖该对象的对象会被自动通知并作出相应的响应.

观察者模式有以下4种角色:

  • Subject(主题):被观察的对象,维护一个观察者列表,提供添加,删除观察者的方法,以及通知所有观察者的方法.

  • Observer(观察者):观察Subject的变化,当Subject变化时接收通知,进行相应的操作.

  • ConcreteSubject(具体主题):实现Subject接口,维护自己状态的变化,当状态变化时通知所有的观察者.

  • ConcreteObserver(具体观察者):实现Observer接口,具体实现在Subject发生变化时的响应方式.

实现

观察者接口

public interface Observer {
    /**
     * 通知观察者变化信息
     *
     * @param temperature
     * @param humidity
     */
    void update(float temperature,float humidity);
}

主题接口

public interface Subject {
    /**
     * 注册观察者
     *
     * @param observer
     */
    void registerObserver(Observer observer);
    /**
     * 删除观察者
     *
     * @param observer
     */
    void removeObserver(Observer observer);
    /**
     * 通知所有观察者
     */
    void notifyObservers();
}

具体主题

public class WeatherData implements Subject {
    private List<Observer> observers;
    private float temperature;
    private float humidity;
    public WeatherData() {
        observers = new ArrayList<>();
    }
    /**
     * 注册观察者
     *
     * @param observer
     */
    @Override
    public void registerObserver(Observer observer) {
        observers.add(observer);
    }
    /**
     * 删除观察者
     *
     * @param observer
     */
    @Override
    public void removeObserver(Observer observer) {
        observers.remove(observer);
    }
    /**
     * 通知所有观察者
     */
    @Override
    public void notifyObservers() {
        observers.forEach(observer -> observer.update(temperature, humidity));
    }
    /**
     * 设置天气信息
     *
     * @param temperature
     * @param humidity
     */
    public void setMeasurements(float temperature, float humidity) {
        this.temperature = temperature;
        this.humidity = humidity;
        notifyObservers();
    }
}

具体观察者

public class CurrentConditionsDisplay implements Observer {
    private float temperature;
    private float humidity;
    public CurrentConditionsDisplay(Subject weatherData) {
        weatherData.registerObserver(this);
    }
    /**
     * 通知观察者变化信息
     *
     * @param temperature
     * @param humidity
     */
    @Override
    public void update(float temperature, float humidity) {
        this.temperature = temperature;
        this.humidity = humidity;
        display();
    }
    private void display() {
        System.out.println("温度:" + temperature + "℃;湿度:" + humidity + "%");
    }
}

测试

public class Demo {
    public static void main(String[] args) {
        WeatherData weatherData = new WeatherData();
        CurrentConditionsDisplay currentConditionsDisplay = new CurrentConditionsDisplay(weatherData);
        weatherData.setMeasurements(35,53);
        weatherData.setMeasurements(32,48);
        weatherData.setMeasurements(26,44);
    }
}

Java如何实现数据更新和事件通知的观察者模式

在这个例子中,WeatherData是主题,CurrentConditonsDisplay是观察者.当WeatherData的数据发生变化时,它会通知已经注册的所有观察者进行相应的更新.在这个例子中CurrentConditionsDisplay观察者会展示当前的温度和湿度信息.

  • 当需要解耦合对象之间的关系时,可以考虑使用观察者模式,例如实现MVC模式中的数据视图分离.

到此,相信大家对“Java如何实现数据更新和事件通知的观察者模式”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI