定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变是,所有依赖于它的对象都能得到通知并被自动更新
场景:
- 当一个抽象模型有两个方面,其中一个方面依赖于另一个方面
- 当对一个对象的改变需要同时桶盖其他对象,而不知道具体有多少个待改变对象
- 当一个对象必须通知其他对象,而它又不能假设其他对象是谁
类图:
优点:
- 降低主题和观察者之间的耦合
- 支持广播
缺点:
- 由于多个观察者的存在,某个或者某些观察者的更新可能导致时间或者空间雪崩式的灾难
更新模式:推/拉
推模式:主题假定知道观察者需要的参数。优势是可以推送确认发生了改变的参数,缺点是对于参数的假定并不一定总是对的
拉模式:主题仅通知观察者发生了变化,具体的参数由观察者去取。优势是观察者可以主动的拉去自己需要的参数,降低了耦合,缺点是观察者并不知道什么参数发生了改变,效率降低