本篇内容主要讲解“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); } }
在这个例子中,WeatherData是主题,CurrentConditonsDisplay是观察者.当WeatherData的数据发生变化时,它会通知已经注册的所有观察者进行相应的更新.在这个例子中CurrentConditionsDisplay观察者会展示当前的温度和湿度信息.
当需要解耦合对象之间的关系时,可以考虑使用观察者模式,例如实现MVC模式中的数据视图分离.
到此,相信大家对“Java如何实现数据更新和事件通知的观察者模式”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。