1.定义
- 定义: 观察者模式 定义了对象之间的一对多依赖,这样以来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
- 可以利用报纸订阅服务,以及出版者和订阅者比拟观察者模式。出版者改成为主题(Subject),订阅者改称为观察者(Observer)
- 主题和观察者定义了一对多的关系,观察者依赖于此主题,只要主题状态一有变化,观察者就会被通知。根据通知的风格,观察者可能因此新值而更新
- 实现观察者模式的方法不止一种,但是以包含 Subject 于 Object 接口的类设计的做法最常见。
- 主题是真正拥有数据的人,观察者是主题的依赖者,在数据变化时更新。这样比起来让许多对象控制同一份数据,可以得到更干净的OO设计
2.类图
- 左上:主题接口,对象使用此接口注册为观察者,或者把自己从观察者中删除。
- 右上:所有潜在的观察者必须实现观察者接口,这个接口只有 update()方法,当主题状态改变时被调用
- 左下:一个具体主题总是实现主题接口,除了注册和撤销方法之外,具体主题还实现了notifyObserver() 方法,此方法用于在状态改变时更新所有当前观察者
- 右下:具体观察者可以是实现接口的任意类,观察者必须注册具体主题,以便接收更新
3.松耦合
- 观察者模式提供了一种对象设计,让主题和观察者之间松耦合
- 互相不知道具体实现和细节
- 任何时候可以增加新的观察者
- 改变任一方不会影响另一方,只要他们之间的接口仍被遵守