您好,登錄后才能下訂單哦!
本篇內容主要講解“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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。