恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

观察者模式(Observer Pattern)是一种行为型设计模式,用于定义对象间的一对多依赖关系

  • 首页
  • 资讯中心
  • /
  • 观察者模式(Observer Pattern)是一种行为型设计模式,用于定义对象间的一对多依赖关系

相关资讯

2027存储产能售罄?三大原厂“配额分配“背后的供需真相 2026/8/5 11:38:41
安康网站建设电话:找对专业团队,让你的企业官网成为业绩倍增的超级引擎 2026/8/5 11:38:41
5分钟掌握Waifu2x-Extension-GUI:免费AI图片视频放大神器完整指南 2026/8/5 11:38:41

最新资讯

如何高效使用开源数据恢复工具:专业级实战指南
拼多多全站推广OCPX全店托管2026新推广工具操作技巧
拼多多商家推流方法|免费 + 付费全链路
【关注可白嫖源码】--课程设计+毕业设计+springboot个性化学习计划制定平台[编号:project89778](案例分析)
暗黑破坏神2为何在现代电脑上卡顿?3个关键问题与D2DXRR的解决方案
SAP权限管理实战:从权限对象、角色创建到用户分配全流程详解

今日推荐

AI小程序创业陷阱大起底(92%新手踩坑的3个致命错误)
为什么92.7%的AI 3D生成项目卡在UV重拓扑?资深TD曝光内部验证过的5步自动化修复协议
三升四,比成绩下滑更可怕的,是孩子开始「认命」

本周热门

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案
分布式配置中心选型实战:Nacos与Consul在创业场景下的对比
MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

观察者模式(Observer Pattern)是一种行为型设计模式,用于定义对象间的一对多依赖关系

发布时间:2026/8/5 11:38:41
观察者模式(Observer Pattern)是一种行为型设计模式,用于定义对象间的一对多依赖关系 观察者模式Observer Pattern是一种行为型设计模式用于定义对象间的一对多依赖关系当一个对象称为“被观察者”或“Subject”的状态发生改变时所有依赖于它的对象称为“观察者”或“Observers”都会自动收到通知并更新。该模式解耦了被观察者与观察者支持动态添加/移除观察者广泛应用于事件驱动系统、GUI框架如Java Swing、Android LiveData、消息总线、发布-订阅系统等场景。典型结构包括Subject被观察者维护观察者列表提供注册attach、注销detach和通知notify方法Observer观察者定义更新接口如update()由具体观察者实现具体被观察者ConcreteSubject与具体观察者ConcreteObserver实现各自逻辑。优点松耦合、可扩展性强、支持广播通信缺点可能引发内存泄漏若未及时注销、通知顺序不可控、缺乏回调反馈机制观察者无法向被观察者返回结果。fromabcimportABC,abstractmethodfromtypingimportList,AnyclassObserver(ABC):abstractmethoddefupdate(self,data:Any)-None:passclassSubject(ABC):def__init__(self):self._observers:List[Observer][]defattach(self,observer:Observer)-None:ifobservernotinself._observers:self._observers.append(observer)defdetach(self,observer:Observer)-None:ifobserverinself._observers:self._observers.remove(observer)defnotify(self,data:Any)-None:forobserverinself._observers:observer.update(data)# 示例天气站通知订阅者classWeatherStation(Subject):defset_temperature(self,temp:float)-None:print(f天气站更新温度{temp}°C)self.notify(temp)classPhoneDisplay(Observer):defupdate(self,data:float)-None:print(f[手机端] 收到温度更新{data}°C)classWebDisplay(Observer):defupdate(self,data:float)-None:print(f[网页端] 收到温度更新{data}°C)# 使用示例stationWeatherStation()phonePhoneDisplay()webWebDisplay()station.attach(phone)station.attach(web)station.set_temperature(25.6)# 输出两条通知观察者模式Observer与发布-订阅模式Pub/Sub本质目标相似解耦通知方与接收方但核心区别在于通信耦合度与中介角色的存在与否因此不属于严格意义上的同一类模式而是演进关系Pub/Sub 可视为观察者模式的松耦合变体或扩展。✅核心区别对比维度观察者模式Observer发布-订阅模式Pub/Sub耦合方式被观察者Subject直接持有并调用观察者Observer引用 →存在直接引用耦合发布者Publisher与订阅者Subscriber均不互相持有引用全部通过中间消息代理Event Bus / Message Broker通信 →完全解耦注册机制观察者主动向被观察者注册subject.attach(observer)订阅者向事件总线注册感兴趣的主题topic发布者也只面向总线发布不感知谁订阅消息传递通知是同步、即时的方法调用observer.update()通常支持异步、缓冲、持久化、过滤、广播/单播等高级语义消息可被暂存、重放、路由生命周期管理被观察者需显式管理观察者列表增删易引发内存泄漏如未detach总线统一管理订阅关系更易实现自动清理如基于弱引用、超时注销典型实现Javajava.util.Observable已弃用、.NETIObservableT、前端EventTarget.addEventListenerRedis Pub/Sub、RabbitMQ、Vue 3 的mitt、RxJS 的Subject增强版、Node.js 的events.EventEmitter轻量级近似关键洞察观察者模式是对象层级的、同步的、内存内的通知机制Pub/Sub 是系统/服务层级的、常为异步的、可能跨进程/网络的消息范式引入了中介Broker作为第一公民。→ 因此Pub/Sub 是观察者模式在分布式、高内聚低耦合需求下的抽象升级而非简单等价替换。# 简化对比示例同一事件“用户登录成功”# ✅ Observer紧耦合user_service.attach(login_logger)# user_service 直接知道 login_loggeruser_service.attach(email_notifier)user_service.notify_login(user)# 同步调用两个对象方法# ✅ Pub/Sub松耦合event_bus.publish(user.login,{user_id:123})# user_service 不知谁监听# login_logger 和 email_notifier 各自向 event_bus 订阅 user.login# event_bus 负责分发二者互不可见

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号