观察者模式

第23章 观察者模式
一、观察者模式的基本介绍
观察者模式(Observer Pattern):定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。
观察者模式又叫做发布-订阅(Publish/Subscribe)模式模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式
观察者模式是一种对象行为型模式
二、观察者模式的原理类图

在这里插入图片描述
观察者包含以下角色:
1.subject(目标)
目标又称为主题,它是指被观察的对象。在目标中定义了一个观察者集合,它可以存储任意数量的观察者对象,它提供了一个接口来增加和删除观察者对象,同时它还定义了通知方法notify()。目标类可以是接口或者是抽象类。
2.ConcreteSubject(具体目标)
具体目标是目标类的子类,通常它包含经常发生改变的数据,当它的状态发生改变时,向它的观察者集合发出通知,同时它还实现了目标类当中有的具体的业务方法(如果有的话)。
3.Observer(观察者)
观察者将对观察目标的改变做出反应,观察者一般定义为接口,该接口声明了更新数据的方法update(),因此又称为抽象观察者。
4.ConcreteObserver(具体观察者)
在具体观察者中维护一个指向具体目标对象的引用,它存储具体观察者的有关状态,这些状态需要和具体目标的状态一致;它实现了update()方法。通常在实现时,可以调用具体目标类的attach()方法将自己添加到目标类的观察者集合中后通过detach()方法将自己从目标类的观察者集合中删除。
三、观察者模式的应用案例
猫、狗与老鼠 :实例说明
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

假设猫是老鼠和狗的观察目标,老鼠和狗是观察者,猫叫老鼠跑,狗也跟着叫,使用观察者模式描述该过程。

四、观察者模式的注意事项和细节
观察者模式的优点:
可以实现表示层和数据逻辑层的分离
在观察目标和观察者之间建立一个抽象耦合
支持广播通信,简化了一对多系统设计的难度
符合开闭原则,增加新的具体观察者无须修改原有系统代码,在具体观察者与观察目标之间不存在关联关系的情况下,增加新的观察目标也很方便
观察者模式的缺点:
如果存在循环依赖时可能导致系统崩溃
没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而只是知道观察目标发生了变化
将所有的观察者都通知到会花费很多的时间
在以下情况下可以使用观察者模式:
一个抽象模型有两个方面,其中一个方面依赖另一个方面,将这两个方面封装在独立的对象中使它们可以各自独立地改变和复用。
一个对象的改变将导致一个或者多个其它对象发生改变,且并不知道具体有多少对象将发生改变,也不知道这些对象是谁。
需要在系统中创建一个触发链

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值