假设猫是老鼠和狗的观察目标,老鼠和狗是观察者,猫叫老鼠跑,狗也跟着叫,使用观察者模式画出结构图
时间: 2024-12-08 20:15:21 浏览: 18
观察者模式是一种软件设计模式,它允许对象之间的一对多依赖关系,并使得当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在这个场景里,我们有三个角色:
1. **主题(Subject)** - 猫:猫是观察目标,负责状态变化(比如发出叫声)。
2. **观察者(Observer)** - 老鼠和狗:它们都是观察者,会因为猫的行为而做出反应(例如逃跑或跟着叫)。
3. **关联(Association)** - 观察者和主题之间的连接。
结构图通常是一个UML图,可以用类图表示。下面是一个简单的类图示例:
```
+-------------------+
| 猫 (Cat) |
+-------------------+
| - observers: List<_observer> |
+-------------------+
| 方法 call() | // 发出叫声
| 更新所有观察者 | // 当状态改变时通知
+-------------------+
+-------------------+
| 老鼠 (Mouse) |
+-------------------+
| - cat: Cat |
+-------------------+
| 反应 (react()) | // 根据猫的call()响应
+-------------------+
+-------------------+
| 狗 (Dog) |
+-------------------+
| - cat: Cat |
+-------------------+
| 反应 (react()) | // 类似老鼠,根据cat的call()响应
+-------------------+
```
在实际应用中,猫有一个观察者列表,当`call()`方法被调用时,会遍历列表并通知每个观察者执行相应的`react()`方法。
阅读全文