• 详细讲解什么是观察者模式


            观察者模式(Observer Pattern)是一种行为设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象状态发生变化时,所有依赖于它的观察者都会得到通知并自动更新。

    该模式主要涉及两种角色:

    1. 主题(Subject): 也称为被观察者或可观察对象,是目标对象。它包含一系列观察者,并提供方法来添加、删除观察者以及通知观察者的操作。

    2. 观察者(Observer): 也称为订阅者,它定义了一个更新的接口,用于主题在状态发生变化时通知观察者。

            观察者模式的核心思想是解除主题和观察者之间的耦合关系,使得它们可以独立变化。当主题的状态发生变化时,所有的观察者都能够及时得到通知,并进行相应的处理。

            下面是一个简单的观察者模式的例子,假设我们有一个气象站,它可以实时测量温度,并通知多个观察者:

    1. import java.util.ArrayList;
    2. import java.util.List;
    3. // 主题接口
    4. interface Subject {
    5. void addObserver(Observer observer);
    6. void removeObserver(Observer observer);
    7. void notifyObservers();
    8. }
    9. // 观察者接口
    10. interface Observer {
    11. void update(float temperature);
    12. }
    13. // 具体主题
    14. class WeatherStation implements Subject {
    15. private List observers = new ArrayList<>();
    16. private float temperature;
    17. public void setTemperature(float temperature) {
    18. this.temperature = temperature;
    19. notifyObservers();
    20. }
    21. @Override
    22. public void addObserver(Observer observer) {
    23. observers.add(observer);
    24. }
    25. @Override
    26. public void removeObserver(Observer observer) {
    27. observers.remove(observer);
    28. }
    29. @Override
    30. public void notifyObservers() {
    31. for (Observer observer : observers) {
    32. observer.update(temperature);
    33. }
    34. }
    35. }
    36. // 具体观察者
    37. class Display implements Observer {
    38. private float temperature;
    39. @Override
    40. public void update(float temperature) {
    41. this.temperature = temperature;
    42. display();
    43. }
    44. public void display() {
    45. System.out.println("Current Temperature: " + temperature);
    46. }
    47. }
    48. // 客户端
    49. public class Client {
    50. public static void main(String[] args) {
    51. WeatherStation weatherStation = new WeatherStation();
    52. Display display1 = new Display();
    53. Display display2 = new Display();
    54. weatherStation.addObserver(display1);
    55. weatherStation.addObserver(display2);
    56. // 模拟温度变化
    57. weatherStation.setTemperature(25.5f);
    58. weatherStation.setTemperature(28.0f);
    59. }
    60. }

            在这个例子中,WeatherStation 是具体主题,实现了 Subject 接口。Display 是具体观察者,实现了 Observer 接口。客户端通过调用 addObserver 方法将观察者注册到主题中,然后通过 setTemperature 方法模拟温度的变化,观察者会收到通知并更新自己的状态。

  • 相关阅读:
    力扣练习——63 找到字符串中所有字母异位词
    搭建redis主从和哨兵的一些配置
    SSM框架学习——SpringBoot之基础配置
    分页查询(关键词: limit)
    Servlet开发-通过代码案例熟悉HttpServletRequest类
    SQL Server2022版本 + SSMS安装教程(手把手安装教程)
    高校教材征订系统(Java+Web+MySQL)
    selenium 自动化测试
    金仓数据库KingbaseES数据库管理员指南--15.4. 视图、同义词和序列的数据字典视图
    面试复习题——底层
  • 原文地址:https://blog.csdn.net/qq_52645134/article/details/134511423