基本概念
观察者模式(Observer Pattern):定义了对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象都得到通知并自动更新。
示例
模式结构(4 个角色)
1. Subject(抽象主题/被观察者)
- 维护一个观察者列表
- 提供:添加、删除、通知观察者的接口
2. ConcreteSubject(具体主题)- 持有状态数据
状态变化时调用 notify() ,通知所有观察者
例子: NewsPublisher
4. Observer(抽象观察者)- 定义一个统一的更新接口: update()
所有观察者必须实现它
5. ConcreteObserver(具体观察者)
实现 update() ,收到通知后做自己的业务
例子: UserA 、 UserB
核心流程
1. 观察者向主题注册(attach)
2. 主题状态变化
3. 主题调用 notify()
4. 自动遍历所有观察者,调用它们的 update()
5. 观察者各自响应更新
优点
1. 松耦合
主题不知道观察者具体是谁、有多少,只依赖抽象接口。
2. 易扩展
新增观察者不用修改主题代码,符合开闭原则。
3. 一对多广播
一个变化自动通知所有依赖方,不用手动挨个调用。
4. 职责清晰
主题只管发布,观察者只管响应,单一职责。
5. 动态灵活
运行时可以随时添加/移除观察者。
一句话总结
观察者模式 = 状态变化自动广播
让“发布者”和“订阅者”彻底解耦,代码更好维护、更好扩展。