设计模式——观察者模式

一、概念:观察者模式(有时又被称为模型(Model)-视图(View)模式、源-收听者(Listener)模式或从属者模式)。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。

二、UML示意图:

 

 

 上图定义了一个抽象的Subject类,并定义了把Observer对象加入到观察者列表的抽象方法Attach和把Observer对象移除出观察者列表的抽象方法Detach和当自身状态发生改变时通知在观察者列表中的每一个Observer对象让他们执行更新的抽象方法Notify。具体观察者类可以继承抽象Subject类并提供不同的实现,以此来衍生出不同的具体Subject类。又定义了抽象的观察者类Observer及抽象方法Update,每一个具体的观察者类可以继承这个抽象观察者类来为Update方法提供不同的实现。

三、优缺点

优点:

  • 观察者模式解除了主题和具体观察者的耦合,让耦合的双方都依赖于抽象,而不是依赖具体。
  • Subject对象只依赖于抽象观察者的接口,就可以让具体Subject类的对象也仅仅依赖于抽象观察者的接口,当要新增不同的观察者的时候只需要新增继承于观察者类的不同具体观察者类就行了,而不需要修改Subject类以及具体Subject类,符合开闭原则。

缺点:

  • 因为要对观察者列表里的观察者一个一个通知过去,当列表中有一个对象卡顿,将会影响到整个工作流程的效率。
  • 有可能会产生死循环,即一个观察者观测到主题A变化,于是执行更新,而这个操作使得主题B产生变化,主题B产生变化后又通知自己的观察者执行更新,而这个操作又导致主题A变化,从而导致死循环。
posted @ 2020-03-16 17:08  夜里寻星  阅读(129)  评论(0)    收藏  举报