介绍
当一个对象存在多个依赖它的对象时,此对象的改变就会影响众多因素,因此我们希望当此对象改变时,可以自动通知它的依赖对象并自动更新依赖对象中的值。
观察者模式就是为此而生,定义对象间的一对多的依赖关系,当一个对象状态改变时,所有依赖于它的对象都得到通知并被自动更新。属于行为型模式
优点:1、观察者和被观察者是抽象耦合的。 2、需要建立一套触发机制
缺点:
- 观察者过多,通知观察者需要花费大量时间。
- 如果存在某些bug,如观察者与被观察者彼此观察,就会导致无限循环。
- 观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。
使用场景:
- 一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这些方面封装在独立的对象中使它们可以各自独立地改变和复用。
- 一个对象的改变将导致其他一个或多个对象也发生改变,而不知道具体有多少对象将发生改变,可以降低对象之间的耦合度。
- 一个对象必须通知其他对象,而并不知道这些对象是谁。
- 需要在系统中创建一个触发链,A对象的行为将影响B对象,B对象的行为将影响C对象……,可以使用观察者模式创建一种链式触发机制。