行为型模式——观察者模式(Observer Pattern)

开头

     今天我们一起学习一下行为型模式中的另一个模式——观察者模式,观察者模式是用来描述类和类之间关系的一种模式,当然是描述如何更好的分配类和类之间职责的一种模式,这就好比软件开发小组一样,组长发出信号以后,组内不同的人员根据相同的信号,产生具体的行为,是不是感觉有点多态的意思。


内容

      我们还是根据语义来分析观察者模式,当你看到观察者时,你会不会想到自己就是一个观察者,骑车的时候我们需要观察路口是不是绿灯或者红灯之类的,每天关注的各种订阅号给你发来的各种消息,自己所在的部门给你们下达任务,这些都是观察者模式,综上所有的观察者都有一个具体的观察目标(即被观察者)。下面我们回味一下电影《功夫》中的精彩片段。

例子

第一步:斧头帮小老大来找事,反而被打,小弟们(通知者)发出求救信号弹(观察者的目标,被观察的对象)。


第二步,信号发出以后,好多观察者看到信号,立即赶来营救,有的观察者拿着斧头,有的拿着枪。不同的观察者有着各自的自己的行为。


通过上面的回顾,我们可以简单的知道,观察者的行为对信号发出者存在依赖关系,而且是一个信号,对应着多个观察者。这多个观察者同时观察一个信号,信号状态发生改变,会通知到所有的观察者,使得观察者时刻改变着自己的行为。

观察者模式大致可以分为四类角色:分别为Subject(目标)、 ConcreteSubject(具体目标)、Observer(观察者)、ConcreteObserver(具体观察者)

Subject(目标):就是被观察的对象,被观察的对象可以定义观察的人有哪些,增加或者删除增加删除的人,以及是通过什么样的方式通知别人的。

 ConcreteSubject(具体目标):被观察者子类,包含经常发生改变的数据,向观察者们发出通知。


Observer(抽象观察者):根据被观察目标发生改变,改变自己的行为状况,声明更新数据的方法。

ConcreteObserver(具体观察者):抽象观察者的子类,实现具体某一个观察者的行为。


客户端:



总结

观察者模式(Observer Pattern):定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。

优点:

(1)观察者模式实现类表示层(观察者)和数据逻辑层(被观察者)的分离,定义了稳定的消息传递机制,每个具体观察者产生自己的行为特点。

(2)被观察者和观察者之间建立一个抽象耦合,被观察者只知道将通知类表中的观察者通知到位,且每一个观察者都继承抽象观察者。

(3)增加新的具体观察者无须修改原有系统代码,符合开闭原则。

缺点:

  (1)观察者无法知道被观察的目标是如何改变状态的。

  (2)一个被观察者对应多个观察者,观察者接收到通知花费时间长。

适用环境:

(1)一个类依赖另一个类,两者独立封装,可以随意的进行改变和复用。

(2)一个类改变(被观察者),另一个类(观察者)改变的数目不确定


    关于观察者模式就先学习到这里,观察者模式说白了就是一个对象发生变化,其他多个对象根据其改变状态产生各自具体行为的问题。如果本篇博客对于初学者的您来说有一定的帮助,记得小编点赞哦。


猜你喜欢

转载自blog.csdn.net/fjxcsdn/article/details/80490978