(二)观察者模式

0 阅读1分钟

基本概念

观察者模式(Observer Pattern):定义了对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象都得到通知并自动更新。

示例

image.png image.png image.png

模式结构(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. 动态灵活
运行时可以随时添加/移除观察者。

 

一句话总结

观察者模式 = 状态变化自动广播

让“发布者”和“订阅者”彻底解耦,代码更好维护、更好扩展。