四、观察者模式

  观察者模式又可称为发布-订阅(Publish/Subscribe)模式(还有其他很多名称)。其定义一种一对多的依赖关系:一个主题对象可被多个观察者对象同时监听,是的每当主题对象状态变化时,所有依赖他的对象都会得到通知并被自动更新。

  实际生活中很多类似的应用场景。比如练习英语口语时,可能需要经常听一些BBC或者ABC的broadcast:对于BBC或者ABC而言,听众有或没有它都会在那里播放;对于听众而言,如果想听BBC或者ABC就打开它们固定的收听频率即可。听众根据接收内容的变化,自主选择是否继续收听。

  类比观察者模式:BBC/ABC就是Publish information,而听众就是Subscribe to BBC/ABC English。BBC/ABC 的节目列表更新就会通知notice,听众根据这个notice自主选择是否继续收听就是自动更新的过程。

  具体用UML图表示如下:

    

   observer subscribe to subject :

    

   subject publish information to observer:

    

  个人理解整个观察者模式的重点就在于通知作为依赖对象其自动更新的依据就是通知,而作为主题对象的被依赖对象其要依据某种规则(这个规则应该是依赖对象认可的)判断状态是否有变化发出通知。这个认知对于判断依赖与被依赖关系很重要,例如下列案例:

  需求:学生在某论坛上提出问题并指定某老师解答。该指定老师会收到关于解答该问题的邮件。确定观察者模式中的依赖与被依赖对象。

  分析:首先找到通知,在根据通知判断Subject和Observer。根据需求老师接收到邮件那么就是老师接收到通知,可以判断老师就是该论坛上的一个Oberserver,该论坛就是一个Subject。

  在实际生产中,如何发出和接收通知的具体细节可能会根据具体的业务场景选择合适的方式。Zookeeper中的通知机制就是服务器端通知,客户端回调的方式。下图为借用的Zookeeper关于Watch部分的思维导图(个人认为整理的还蛮全面,希望学习使用不涉及侵权O(∩_∩)):

    

 

  

posted on 2021-05-30 04:00  池塘里洗澡的鸭子  阅读(64)  评论(0编辑  收藏  举报