当前位置: 首页 > article >正文

【设计模式系列】观察者模式

一、什么是观察者模式

观察者模式(Observer Pattern)是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。这种模式也被称为发布-订阅模式,其中对象(主题)维护一个依赖于它的观察者列表,并且在其状态变化时通知它们。

二、观察者模式的角色

  1. Subject(主题)

    • 也被称为Observable,它是观察者模式的核心。主题包含观察者列表,并为观察者提供注册(订阅)、注销(取消订阅)和通知的方法。
    • 它有两种形式:抽象主题和具体主题。抽象主题提供一个接口,定义了管理观察者的方法,而具体主题实现了这个接口,并在状态变化时通知所有观察者。
  2. Observer(观察者)

    • 观察者定义了一个更新接口,该接口在被观察者状态变化时会被调用。这个接口通常包含一个update()方法,它接收一个参数,该参数通常是主题对象的引用。
  3. ConcreteSubject(具体主题)

    • 具体主题是主题的一个实现,它包含状态信息,并且在状态变化时负责通知所有注册的观察者。
  4. ConcreteObserver(具体观察者)

    • 具体观察者实现了观察者接口,并在update()方法中定义了接收到通知后的具体逻辑。

三、观察者模式的典型应用场景

  1. 事件处理系统:许多编程框架和库使用观察者模式来实现事件处理机制,允许对象在状态变化时通知其他对象。

  2. 缓存系统:缓存数据时,如果底层数据发生变化,缓存系统需要通知依赖这些数据的应用或服务。

  3. 配置管理和服务发现:在微服务架构中,服务的注册和发现机制常常使用观察者模式,以确保服务的变化能够及时通知到其他服务。

四、观察者模式在Observer中的应用

在Java中,Observer类和Observable类是观察者模式的典型实现,它们提供了一种实现对象间一对多依赖关系的方式。以下是Observer类和Observable类在观察者模式中的应用:

  1. Observable类

    • Observable类充当抽象主题(Subject)的角色,它维护了一个观察者(Observer)对象的列表,并且提供了方法来添加(addObserver)、删除(deleteObserver)观察者以及通知(notifyObservers)所有观察者。
  2. Observer接口

    • Observer接口定义了观察者必须实现的update方法,该方法将在被观察对象(Observable对象)的状态发生改变时被调用。
import java.util.Observable;
import java.util.Observer;

// 具体观察者
class ConcreteObserver implements Observer {
    @Override
    public void update(Observable o, Object arg) {
        System.out.println("Observer received update: " + arg);
    }
}

// 具体主题
class ConcreteObservable extends Observable {
    private int counter;

    public void increment() {
        counter++;
        setChanged(); // 标记状态改变
        notifyObservers(counter); // 通知观察者
    }
}

public class ObserverPatternDemo {
    public static void main(String[] args) {
        ConcreteObservable observable = new ConcreteObservable();
        ConcreteObserver observer = new ConcreteObserver();

        observable.addObserver(observer); // 注册观察者

        // 模拟状态变更
        observable.increment();
        observable.increment();
    }
}

在这个示例中,ConcreteObservable类继承了Observable类,表示被观察的主题,它有一个increment方法来模拟状态的变更。每次调用increment方法时,都会通知所有注册的观察者(ConcreteObserver实例)。观察者通过实现Observer接口的update方法来接收更新。

观察者模式在Java中的应用非常广泛,特别是在需要实现动态通知和更新的场景中。通过使用Observable类和Observer接口,开发者可以轻松地实现这一模式,从而提高代码的模块化和可维护性。


http://www.kler.cn/news/363130.html

相关文章:

  • 基于SSM+小程序的就业管理系统(就业1)
  • 2.1 > Shell 是什么、如何更熟练的使用 Bash Shell
  • Java安全编程:公钥加密和私钥签名的实践指南
  • 文通车牌识别相机在工地称重应用中的卓越表现
  • 九、pico+Unity交互开发——触碰抓取
  • element设置时间和日期框早于现在的时间和日期禁用
  • 3D虚拟服装试穿技术:迈向元宇宙与AR电商的新时代
  • 鼠标移入盒子,盒子跟随鼠标移动
  • word,exl,txt转pdf
  • HttpOnly Cookie
  • 产品经理应掌握的 API 接口技术知识
  • 暴雨基于NVIDIA Blackwell的AI服务器开始交付给客户
  • React与TypeScript
  • 分布式环境的分布式锁 - Redlock方案和fencing token方案
  • 手撕数据结构 —— 堆(C语言讲解)
  • Spring Boot:植物健康的智能守护者
  • 【建议收藏】2024年最新Windows系统重装教程:轻松学会,小白必看,赶紧收藏!
  • Unity3D VisionPro 环境扫描 空间理解 网格扫描 AR Mesh
  • Linux - 文件描述符 | 文件系统 | 软硬链接
  • 【实战场景】java.util.LinkedHashMap cannot be cast to XXXX 问题
  • 私域小程序怎么运营,如何引流?(二)
  • 基于MATLAB车道检测与跟踪
  • 《计算机视觉》—— 换脸
  • 背景音乐自动播放createjs
  • keepalived(高可用)+nginx(负载均衡)+web
  • 在 Spring 框架中,@ComponentScan` 扫描的注解类型