NipGeihou's blog NipGeihou's blog
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档

NipGeihou

我见青山多妩媚,料青山见我应如是
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档
  • 设计模式

    • 介绍与目的
    • 七大设计模式
    • 面向对象编程范式
    • 创造者模式
    • 创建者模式-单例模式
    • 创建者模式-工厂模式
    • 创建者模式-抽象工厂模式
    • 创建者模式-建造者模式
    • 创建者模式-原型模式
    • 结构型模式
    • 代理模式
    • 中介者模式
    • 命令模式
    • 责任链模式
    • 装饰模式
    • 策略模式
    • 适配器模式
    • 迭代器模式
    • 组合模式
    • 观察者模式
      • 概念
      • 使用场景
      • 结构
      • 代码示例
    • 外观模式
    • 备忘录模式
    • 访问者模式
    • 状态模式
    • 解释器模式
    • 享元模式
    • 桥接模式
    • 模板方法模式
  • 开发规范

  • 经验分享

  • 记录

  • 快速开始

  • 笔记

  • 面试题

  • 微服务

  • 踩过的坑

  • Java
  • 设计模式
NipGeihou
2022-09-01
目录

观察者模式

# 概念

定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。

# 使用场景

  • 关联行为场景。需要注意的是,关联行为是可拆分的,而不是 “组合” 关系。
  • 事件多级触发场景。
  • 跨系统的消息交换场景,如消息队列的处理机制。

# 结构

Subject 被观察者:定义被观察者必须实现的职责,它必须能够动态地增加、取消观察者。它一般是抽象类或者是实现类,仅仅完成作为被观察者必须实现的职责:管理观察者并通知观察者。

Observer 观察者:观察者接收到消息后,即进行 update(更新方法)操作,对接收到的信息进行处理。

ConcreteSubject 具体的被观察者:定义被观察者自己的业务逻辑,同时定义对哪些事件进行通知。

ConcreteObserver 具体的观察者:每个观察者在接收到消息后的处理反应是不同的,各个观察者有自己的处理逻辑。

# 代码示例

public abstract class Subject {
    //定义一个观察者数组
    private Vector<Observer> obsVector = new Vector<Observer>();
    //增加一个观察者
    public void addObserver(Observer o){
        this.obsVector.add(o);
    }
    //删除一个观察者
    public void delObserver(Observer o){
        this.obsVector.remove(o);
    }
    //通知所有观察者
    public void notifyObservers(){
        for(Observer o:this.obsVector){
            o.update();
        }
    } 
}
上次更新: 2022/12/31, 03:04:26
组合模式
外观模式

← 组合模式 外观模式→

最近更新
01
iSCSI服务搭建
05-10
02
磁盘管理与文件系统
05-02
03
网络测试 - iperf3
05-02
更多文章>
Theme by Vdoing | Copyright © 2018-2025 NipGeihou | 友情链接
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式