📣
一句话理解:观察者模式建立一对多通知关系;主题状态变化时,所有已订阅的观察者都会收到通知,而主题不依赖它们的具体类型。

Unity/C# 示例:生命值事件

UI 观察者在生命周期内成对订阅:
Health 不需要知道血条、音效或成就系统的存在。

设计要点

  • OnEnable/OnDisable 或明确的初始化/释放方法中成对订阅。
  • 静态事件会延长订阅者生命周期,场景切换后尤其容易残留引用。
  • 通知过程中某个观察者抛异常可能影响后续观察者,应定义异常策略。
  • 高频事件要关注分配与调用成本,不要每帧广播没有变化的数据。

观察者与事件总线

直接事件让发布者与事件契约清晰,容易追踪;事件总线进一步隐藏发布者和订阅者,但依赖关系也更隐蔽。局部领域事件优先直接订阅,只有跨系统通信确实需要时再引入事件总线。

推模型与拉模型

示例把新旧状态直接推给观察者。另一种方式只发送“已变化”,观察者再读取主题。推模型方便,拉模型能减少事件参数膨胀。

小结

观察者模式能解除具体类型依赖,但不会自动解决生命周期。Unity 中最重要的实践是明确谁订阅、何时退订,以及事件是否应该跨场景存在。