核心内容摘要
ISO 13485医疗PCB质量管控新规范
观察者模式协作关系说明
资源获取通过网盘分享的文件CXX观察者模式observer_pattern链接: https://pan.baidu.com/s/15_ev6Y-ZL0cQjrfIrA7Y9Q?pwdubrb 提取码: ubrb 模式概述观察者模式Observer Pattern是一种行为设计模式它定义了对象间的一对多依赖关系当一个对象被观察者的状态发生变化时所有依赖它的对象观察者都会自动收到通知并进行更新。
核心角色 角色 职责 实现类Subject被观察者管理观察者列表提供注册、移除和通知方法SubjectObserver观察者定义更新接口用于接收被观察者的通知ObserverConcreteSubject具体被观察者实现被观察者接口维护具体状态Subject本示例直接使用Subject作为具体被观察者ConcreteObserver具体观察者实现观察者接口处理被观察者的通知ConcreteObserverA、ConcreteObserverB
️ 协作关系思维导图
详细协作流程
1 初始化阶段客户端创建被观察者对象客户端创建多个观察者对象客户端调用被观察者的attach()方法将观察者注册到被观察者的观察者列表中
2 通知阶段客户端调用被观察者的setState()方法修改被观察者的状态setState()方法内部调用notify()方法开始通知所有观察者notify()方法遍历观察者列表依次调用每个观察者的update()方法每个观察者的update()方法被调用执行各自的业务逻辑
3 ⚡ 动态调整阶段客户端可以随时调用被观察者的detach()方法将观察者从列表中移除移除后的观察者将不再收到被观察者的通知客户端也可以随时调用attach()方法重新注册观察者
代码执行流程以main.cpp为例详细执行流程如下
关键方法调用链
1 ➕ 注册观察者Client.attach(observer) → Subject.attach() → 观察者列表.push_back(observer)
2 状态变化通知Client.setState(state) → Subject.setState() → Subject.notify() → 遍历观察者列表 → 每个Observer.update(state)
3 ➖ 移除观察者Client.detach(observer) → Subject.detach() → 观察者列表.remove(observer)
✨ 设计优势 松耦合被观察者和观察者之间通过接口通信降低了耦合度 可扩展性可以轻松添加新的观察者类型无需修改被观察者代码⚡ 触发机制实现了事件驱动的编程模型状态变化自动触发更新 灵活性可以动态添加和移除观察者
应用场景️ 图形界面中的事件处理系统 消息队列和发布-订阅系统 数据监控和日志系统⚙️ 配置文件更新通知 股票价格实时更新
与其他模式的区别 模式 主要区别观察者模式一对多关系被观察者主动通知观察者发布-订阅模式引入中间层消息队列观察者被动订阅中介者模式多对多关系通过中介者协调对象间通信迭代器模式用于遍历集合不涉及事件通知
代码优化建议 线程安全当前实现不是线程安全的在多线程环境下需要添加互斥锁保护观察者列表 避免循环依赖注意避免观察者和被观察者之间的循环引用⏱️ 异步通知对于耗时的观察者更新可以考虑使用异步通知机制 通知优先级可以为观察者添加优先级按照优先级顺序通知 批量通知对于频繁状态变化的场景可以考虑批量通知减少通知次数
11.
总结观察者模式是一种经典的设计模式它实现了对象间的高效通信和状态同步。
通过合理使用观察者模式可以提高系统的可扩展性、松耦合性和可维护性。
本示例展示了观察者模式的基本实现和