观察者模式

核心概念

主题接口:具有状态,维持一个list,其中存放观察者,当状态变化时候通知观察者执行

观察者接口:收到主题的通知后,执行相应的方法

具体主题实现类

具体观察者发实现类

核心思想

主题状态改变,通知所有的监听者

观察者模式的核心思想就是一个主题状态改变时,会通知所有注册的观察者。主题维护一个观察者列表,当主题的状态发生变化时,会遍历观察者列表并调用每个观察者的更新方法,以便观察者能够获取最新的状态信息并执行相应的操作。

class ConcreteSubject implements Subject {
    private int state;
    private List<Observer> observers = new ArrayList<>();

    @Override
    public void registerObserver(Observer observer) {
        observers.add(observer);
    }

    @Override
    public void removeObserver(Observer observer) {
        observers.remove(observer);
    }

    @Override
    public void notifyObservers() {
        for (Observer observer : observers) {
            observer.update(state);
        }
    }

    public void setState(int state) {
        this.state = state;
        notifyObservers();
    }
}

监听者根据主题状态,做出相应行为

观察者的更新方法通常包含一个参数,该参数是主题的状态信息。观察者通过检查这个状态信息,可以根据具体的业务逻辑执行相应的操作。

class ConcreteObserver implements Observer {
    private String name;

    public ConcreteObserver(String name) {
        this.name = name;
    }

    @Override
    public void update(int state) {
        if (state > 5) {
            System.out.println(name + " received update and is taking action: High state detected.");
            // 执行高状态的操作
        } else {
            System.out.println(name + " received update and is taking action: Normal state detected.");
            // 执行正常状态的操作
        }
    }
}

观察者模式的优点

松耦合可重用:观察者模式的目的就是让主题和观察者之间的关系更加松散,使得它们可以独立地演进和变化。
分布式事件处理: 观察者模式常被用于实现分布式事件处理系统。主题和观察者可以在不同的系统或模块中,通过事件的方式进行通信,从而支持分布式系统的协作。
事件驱动架构: 观察者模式是事件驱动架构的基础。通过观察者模式,可以构建灵活的事件系统,支持异步事件处理,提高系统的响应性和扩展性。

相关推荐

  1. 观察模式 Observer

    2024-02-23 16:20:01       41 阅读
  2. 观察模式学习

    2024-02-23 16:20:01       34 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-23 16:20:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-23 16:20:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-23 16:20:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-23 16:20:01       18 阅读

热门阅读

  1. phpspreadsheet导出数据和图片到excel

    2024-02-23 16:20:01       30 阅读
  2. 如何快速跑lvs来dbug

    2024-02-23 16:20:01       28 阅读
  3. SpringBoot3整合elasticsearch8

    2024-02-23 16:20:01       28 阅读
  4. LeetCode 889. 根据前序和后序遍历构造二叉树

    2024-02-23 16:20:01       25 阅读
  5. 关于OpenAI的Sora的基本介绍

    2024-02-23 16:20:01       33 阅读
  6. Docker安装Postgresql12

    2024-02-23 16:20:01       25 阅读