观察者模式Observer Pattern

定义

观察者模式(Observer Pattern),又叫发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。定义一种一对多的依赖关系,一个主题对象可被多个观察者对象同时监听,使得每当主题对象状态变化时,所有依赖于它的对象都会得到通知并被自动更新。
属于行为型模式。

适用场景

  1. 当一个抽象模型包含两个方面内容,其中一个方面依赖于另一个方面
  2. 其他一个或多个对象的变化依赖于另一个对象的变化。
  3. 实现类似广播机制的功能,无需知道具体收听者,只需分发广播,系统中感兴趣的对象会自动接收该广播。
  4. 多层级嵌套使用,形成一种链式触发机制,使得事件具备跨域(跨越两种观察者类型)通知。

举例

  1. Spring ContextLoaderListener
  2. JDK EventListener

优点

  1. 观察者和被观察者是松耦合(抽象耦合)的,符合依赖倒置原则。
  2. 分离了表示层(观察者)和数据逻辑层(被观察者),并且建立了一套触发机制,使得数据的变化可以响应到多个表示层上。
  3. 实现了一对多的通讯机制,支持事件注册机制,支持兴趣分发机制,当被观察者触发事件时,只有感兴趣的观察者可以接收到通知。

缺点

  1. 如果观察者数量过多,则事件通知会耗时较长。
  2. 事件通知呈线性关系,如果其中一个观察者处理事件卡壳,会影响后续的观察者接收该事件。
  3. 如果观察者和被观察者之间存在循环依赖,则可能造成两者之间的循环调用,导致系统崩溃。

你可能感兴趣的:(观察者模式Observer Pattern)