设计模式之【观察者模式】

因为在学习zookeeper的适合,从设计模式角度来说,它是基于观察者模式的,所以来学习一下。

观察者模式:

  当对象存在一对多关系时,使用观察者模式(Observer Pattern)。当一个对象修改时,自动通知依赖它的对象。观察者模式属于行为模式。

主要解决:

  易用、低耦合,保证高度写作,解决对象状态改变通知其他对象的问题。

关键代码:

  在抽象类中有一个ArrayList存放观察者们。

优点:

  1)观察者和被观察者是抽象耦合的。

  2)建立一套触发机制

缺点:

  1)如果一个被观察者有很多的直接和间接的观察者的化,将所有的观察者通知到会浪费很多时间。

  2)如果观察者和观察目标之间又循环依赖的话,观察目标会触发它们之间进行循环调用,导致系统崩溃。

  3)观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅知道观察目标发生了变化。

使用场景:

  1)一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这些方面封装在独立的对象中使它们可以各自独立的改变和复用。

  2)一个对象的改变将导致其他一个或多个对象也发生变化,而不知道具体有多少对象将发生改变,可以降低对象之间的耦合度。

  3)一个对象必须通知其他对象,并不知道对象是啥。

  4)需要在系统中创建一个触发链,a对象行为影响b对象,b对象行为影响c对象。。。可以使用观察者模式创建一种链式触发机制。

注意事项:

  采用异步方式,避免某一观察者错误导致系统卡壳。

实际场景可选择消息队列,spring事件机制等。

posted @ 2021-08-30 00:10  墨梅青莲  阅读(50)  评论(0)    收藏  举报