观察者模式(Observer)

定义:

定义对象之间的一种一对多的依赖关系,使得每当一个对象的状态发生变化时,其相关的依赖对象都可以得到通知并被自动更新。

模式主要用于多个不同的对象对一个对象的某个方法会做出不同的反应!

比如猫叫之后狗会叫老鼠会逃跑,这时候猫就是被观察者,老鼠和狗都是观察者。

角色:

  • 抽象目标:这是被观察的对象(抽象)
    • 这是核心,里面需要一个成员属性变量存储所有的观察者,需要定义add和remove观察者的方法,需要给出notify方法通知所有的观察者对象
  • 具体目标(具体的被观察者):猫继承抽象目标类,实现里面的方法,写出猫的反应,并且循环输出所有观察者的反应
  • 抽象观察者:接口,定义响应方法。
  • 具体观察者:实现抽象观察者方法,重写响应方法。
  • 客户端调用:先使用具体目标对象的add方法添加具体观察者对象,然后调用其notify方法通知观察者。

核心理解

观察者模式做的事情是这样的:

有这么一个场景,比如说一个对象的某个变化会造成其他类的不同的反应,比如说股票的涨跌和股民的状态就是一种动态的关联变化,观察者模式就是来描述这样的一个场景的!

具体是这样完成的:

根据依赖倒转原则,首先需要一个抽象的被观察的类,这个类拥有的成员属性变量是和它有关系的那些观察者对象,一般是有多个对象,如果这个属性是一个集合,那么需要定义两个接口方法,一个增加一个删除,最后还需要一个描述自身状态的方法

具体的被观察者继承自抽象的被观察类, 这个类重写它的状态变化方法注意这个方法需要遍历所有观察者对象的response方法

观察者同样也需要进行抽象,需要一个观察者接口类,这个类只有一个方法就是response()

具体的观察者实现这个接口,重写response方法!

客户端在调用时,需要把观察者添加到被观察者里,然后调用被观察者的状态变化方法,就会看到它所有的观察者对这个状态做出的不同的反应!


posted @   靠谱杨  阅读(852)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2020-11-30 【已解决】JDBC --- update代码运行成功但是数据库数据没有更新

喜欢请打赏

扫描二维码打赏

了解更多

点击右上角即可分享
微信分享提示