深入理解观察者模式

Posted zhuziqiya

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入理解观察者模式相关的知识,希望对你有一定的参考价值。

首先,看一下观察者模式设计类图:

技术图片

定义:

观察者模式软件设计模式的一种。在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实时事件处理系统。

特点:

建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应。在此,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展。观察者模式在观察目标和观察者之间建立一个抽象的耦合。观察者模式支持广播通信,观察者模式符合“开闭原则”的要求。

结构:

观察者模式包含如下几个角色:

  • Subject: 目标
  • ConcreteSubject: 具体目标
  • Observer: 观察者
  • ConcreteObserver: 具体观察者

缺点:

  • 如果一个观察目标对象有很多直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。
  • 如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃。
  • 观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。

适用场景:

  • 一个对象要发生改变,将导致对应的有一个或多个对象要相应的发生改变,而不知道具体有多少个对象要发生变化,可以降低对象之间的耦合度。
  • 一个对象要通知其他对象,而不知道具体有哪些对象。
  • 需要在系统中创建一个触发链,A对象的行为将影响B,B对象的行为将影响C,可以使用观察者模式创建一个触发链。

以上是关于深入理解观察者模式的主要内容,如果未能解决你的问题,请参考以下文章

深入理解JavaScript系列(32):设计模式之观察者模式

观察者模式深入实践

深入Java泛型(四RxJava中深入理解泛型)

深入Java泛型(四RxJava中深入理解泛型)

深入理解 KVCKVO 实现机制 — KVO

KVO深入理解