news 2026/8/28 19:28:20

一篇文章带你搞懂“设计模式”! - - 观察者模式(17)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一篇文章带你搞懂“设计模式”! - - 观察者模式(17)

观察者模式

  1. 观察者模式是一种行为型设计模式,又被称为"发布-订阅"模式,它定义了对象之间的一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都会收到通知并自动更新。
  2. 观察者模式的关注点是对象之间的通信以及被观察对象的状态。

观察者模式工作原理

核心成员:

  • 被观察者(Subject):被观察的对象,它的内部包含了观察者对象的集合,并提供了添加、通知和删除观察者对象的统一接口。
  • 观察者(Observer):接收Subject通知的对象,它订阅了Subject的状态,并提供了更新操作的统一接口。
  • 具体的被观察者(ConcreteSubject):包含Subject类接口的具体实现,维护了观察者的列表,自身状态发生变化时通知所有的观察者。
  • 具体的观察者(ConcreteObserver):包含Observer类接口的具体实现,提供了更新操作的具体实现细节,一旦收到Subject的通知便进行更新操作。


观察者模式工作流程

  1. 被观察者维护一个观察者的列表,并提供了管理和通知观察者的方法。
  2. 观察者与被观察者绑定(attach),并将自己添加到观察者列表中。
  3. 当被观察者的状态发生变化时,开始通知观察者,通知的方式一般是遍历观察者列表,遍历时会调用每个观察者的更新方法
  4. 观察者完成具体的更新操作。



观察者模式优缺点

观察者模式的优点:

  • 符合"开闭原则"的要求。
  • 支持广播的通信方式。
  • 支持事件驱动编程。
  • 可以动态添加观察者,代码扩展性好。

观察者模式的缺点:

  • 每次状态变化都要遍历所有观察者,性能开销大。
  • 每次状态变化都要通知所有的观察者,通信时间变长。
  • 观察者数量过多会使代码的可读性变差。
  • 当有多个客户端操作观察者的删除时,会带来数据安全问题。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/28 19:26:21

企业三层网络架构的10大致命设计错误,基本上都是同行踩过的

企业网络经典的三层架构(Access接入层、Distribution分布/汇聚层、Core核心层)是Cisco、华为等厂商推荐的成熟模型:接入层负责用户终端接入与基本安全,分布层实现策略控制、路由聚合与VLAN间路由,核心层则专注高速、无状态转发。理论上它具备高可用、可扩展、低延迟的优势…

作者头像 李华
网站建设 2026/8/25 22:55:46

Java处理JSON编程实用技巧

以下是2025–2026年视角下,Java 处理 JSON 最实用、最常被用到的技巧汇总(主要基于目前最主流的几种库)。 目前主流选择排序(推荐优先级): 排名库推荐场景性能活跃度Spring Boot 3.x 默认1Jackson企业级、…

作者头像 李华
网站建设 2026/8/18 23:19:19

Mybatis控制台打印SQL执行信息(执行方法、执行SQL、执行时间)

文章目录 前言一、基本功能介绍 1.1本章功能效果预览图: 二、可执行源码 2.1 yaml基础配置2.2 MybatisAnalyzeSQLInterceptor实现SQL拦截 前言 SQL性能监控是一个程序必要的功能,通常我们可以使用数据库自带的客户端工具进行SQL性能分析。然而对于一些专业度不高…

作者头像 李华
网站建设 2026/8/28 5:28:56

C语言第24章 多维数组入门

文章目录 第24章 多维数组入门 本章导读 24.1 二维数组的概念 一、什么是二维数组 二、二维数组的声明 三、理解"数组的数组" 24.2 二维数组的声明与初始化 一、声明方式 二、初始化注意事项 三、代码实践 24.3 二维数组的遍历 一、基本遍历方法 二、行主序 vs 列主序…

作者头像 李华
网站建设 2026/8/25 19:25:34

C语言第25章 字符数组与字符串

文章目录 第25章 字符数组与字符串 本章导读 25.1 字符数组与字符串的关系 一、字符数组 二、字符串 三、关键区别 25.2 字符串的初始化 一、初始化方法 二、初始化注意事项 25.3 字符串的输入输出 一、输出字符串 二、输入字符串 三、常见问题与注意事项 25.4 基本的字符串操作…

作者头像 李华