Spring Boot观察者模式实战

[复制链接]
发表于 2025-12-30 03:38:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
观察者模式简介

观察者模式(Observer Pattern)是一种活动筹划模式,它界说了对象间的一种一对多的依赖关系,当一个对象状态发生改变时,全部依赖于它的对象都会得到关照并主动更新。这种模式也被称为发布-订阅模式、模子-视图模式、源-监听器模式、附属者模式等。
观察者模式的优缺点

长处


  •         低落耦合度:观察者模式将主题和观察者分离,主题不须要知道观察者的详细细节,从而低落了它们之间的耦合度。
  •         支持广播通讯:主题状态厘革时,可以关照多个观察者,实现了一对多的通讯,方便信息广播。
  •         开闭原则:通过增长新的观察者类和主题类,可以扩展观察者模式,符合开闭原则。
  •         可维护性:由于观察者和主题之间的关系是疏松的,以是更容易维护和修改。
缺点


  •         性能题目:假如观察者太多,关照全部观察者大概会影响性能,尤其是在大规模体系中。
  •         次序题目:观察者的关照次序大概不确定,假如有次序要求,须要额外处理惩罚。
  •         大概导致循环依赖:主题和观察者之间的循环依赖大概引入题目,须要鉴戒处理惩罚。
实战业务场景

场景一:股票市场监控监控

假设我们须要开辟一个股票市场监控监控体系,当股票代价发生厘革时,体系须要关照全部注册的投资者。这里可以使用观察者模式,将股票市场作为主题,投资者作为观察者。
  1. [/code]java
  2. [code]
  3. public interface Observer {
  4.     void update(double price);
  5. }
  6. public interface Subject {
  7.     void registerObserver(Observer observer);
  8.     void removeObserver(Observer observer);
  9.     void notifyObservers();
  10. }
  11. public class StockMarket implements Subject {
  12.     private List<Observer> observers = new ArrayList<>();
  13.     private double price;
  14.     @Override
  15.     public void registerObserver(Observer observer) {
  16.         observers.add(observer);
  17.     }
  18.     @Override
  19.     public void removeObserver(Observer observer) {
  20.         observers.remove(observer);
  21.     }
  22.     @Override
  23.     public void notifyObservers() {
  24.         for (Observer observer : observers) {
  25.             observer.update(price);
  26.         }
  27.     }
  28.     public void setPrice(double price) {
  29.         this.price = price;
  30.         notifyObservers();
  31.     }
  32. }
  33. public class Investor implements Observer {
  34.     private String name;
  35.     public Investor(String name) {
  36.         this.name = name;
  37.     }
  38.     @Override
  39.     public void update(double price) {
  40.         System.out.println(name + " 收到股票价格更新,当前价格为 " + price);
  41.     }
  42. }
复制代码
场景二:天气信息更新

另一个场景是天气信息更新体系,当天气数据(如温度、湿度、压力)发生厘革时,须要更新全部注册的表现装备。这里,天气数据作为主题,表现装备作为观察者。
  1. [/code]java
  2. [code]
  3. public class WeatherData {
  4.     private List<Observer> observers;
  5.     private float temperature;
  6.     private float humidity;
  7.     private float pressure;
  8.     public WeatherData() {
  9.         observers = new ArrayList<>();
  10.     }
  11.     public void registerObserver(Observer o) {
  12.         observers.add(o);
  13.     }
  14.     public void removeObserver(Observer o) {
  15.         observers.remove(o);
  16.     }
  17.     public void notifyObservers() {
  18.         for (Observer observer : observers) {
  19.             observer.update(temperature, humidity, pressure);
  20.         }
  21.     }
  22.     public void measurementsChanged() {
  23.         notifyObservers();
  24.     }
  25.     public void setMeasurements(float temperature, float humidity, float pressure) {
  26.         this.temperature = temperature;
  27.         this.humidity = humidity;
  28.         this.pressure = pressure;
  29.         measurementsChanged();
  30.     }
  31. }
  32. public class DisplayElement implements Observer {
  33.     private float temperature;
  34.     private float humidity;
  35.     private float pressure;
  36.     @Override
  37.     public void update(float temperature, float humidity, float pressure) {
  38.         this.temperature = temperature;
  39.         this.humidity = humidity;
  40.         this.pressure = pressure;
  41.         display();
  42.     }
  43.     public void display() {
  44.         System.out.println("Current conditions: " + temperature + "F degrees and " + humidity + "% humidity and " + pressure + " mm pressure");
  45.     }
  46. }
复制代码
总结

观察者模式在许多场景下都非常有用,特殊是在须要实现对象间松耦合通讯的情况下。但在使用时须要注意性能题目、循环依赖和实行次序等方面的思量。通过上述实战业务场景,我们可以看到观察者模式怎样在实际项目中应用,以及怎样通过Spring Boot的事故驱动机制来实现观察者模式,进步体系的机动性和可维护性。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表