当前位置: 首页 > article >正文

故事讲解设计模式:观察者模式

1.故事背景:

在一个小镇上,有一家非常受欢迎的报纸店,老板叫老张。这家报纸店每天都会发布最新的新闻,镇上有很多居民都订阅了这家报纸,他们希望能够第一时间收到最新的消息。


2.故事发展:

  1. 老张的报纸店
    老张是报纸店的核心,他负责收集新闻、编辑报纸,并在每天早晨发布。

    • 问题:老张需要通知所有订阅者,但订阅者数量可能很多,而且可能会随时增加或减少。
  2. 订阅者们
    镇上有几位居民对新闻非常感兴趣,他们是:

    • 小李:喜欢体育新闻。
    • 小王:关心财经新闻。
    • 小赵:关注社会新闻。
      他们都订阅了老张的报纸,希望每天早晨能收到最新的新闻。
  3. 观察者模式登场
    老张想到了一个好办法:

    • 老张被观察者(Subject)​,负责管理订阅者列表和发布新闻。
    • 订阅者们观察者(Observers)​,他们可以随时订阅或取消订阅报纸。
    • 每次有新闻发布时,老张会通知所有订阅者,订阅者会根据自己感兴趣的新闻类型进行处理。

3.故事细节:

  1. 订阅
    小李、小王和小赵都向老张订阅了报纸。老张把他们的名字记在了一个订阅者列表中。

  2. 发布新闻
    有一天,老张发布了一条体育新闻和一条财经新闻

    • 老张通知了所有订阅者。
    • 小李收到通知后,发现是体育新闻,非常高兴,立刻阅读。
    • 小王收到通知后,发现是财经新闻,也立刻阅读。
    • 小赵收到通知后,发现没有社会新闻,就忽略了这条消息。
  3. 取消订阅
    过了一段时间,​小王对财经新闻不再感兴趣了,于是取消了订阅。老张把小王的名字从订阅者列表中移除。

  4. 新订阅者加入
    镇上新搬来了一位居民小刘,他特别喜欢社会新闻,于是也订阅了老张的报纸。老张把小刘的名字加入了订阅者列表。

  5. 再次发布新闻
    老张发布了一条社会新闻

    • 小刘收到通知后,立刻阅读。
    • 小赵也收到通知,发现是社会新闻,非常开心,立刻阅读。

4.故事总结:

在这个故事中,​观察者模式的核心思想是:

  • 被观察者(老张)​:负责管理观察者(订阅者)列表,并在状态发生变化时(发布新闻)通知所有观察者。
  • 观察者(订阅者们)​:可以随时订阅或取消订阅,并在收到通知后根据自己的需求处理消息。

观察者模式的好处是:

  • 解耦:老张不需要知道订阅者具体是谁,只需要通知他们即可。
  • 灵活性:订阅者可以随时加入或退出,系统可以动态扩展。

5.技术对应:

  • 被观察者(Subject)​:通常是一个接口或类,负责管理观察者列表和通知观察者。
  • 观察者(Observer)​:通常是一个接口或类,定义了接收通知的方法。
  • 具体被观察者(Concrete Subject)​:实现被观察者接口,管理具体的状态变化。
  • 具体观察者(Concrete Observer)​:实现观察者接口,处理通知。

希望这个故事能帮助你轻松理解观察者模式!


http://www.kler.cn/a/595233.html

相关文章:

  • Kotlin标准函数库学习
  • csv文件格式和excel数据格式有什么区别
  • 游戏引擎学习第171天
  • JavaScript-函数、对象详解
  • 3.21学习总结
  • 【STM32】SPI通信协议W25Q64Flash存储器芯片(学习笔记)
  • Node.js 包与 npm 详解:使用 npm 的重要注意事项与最佳实践
  • python-56-基于Vue和Flask进行前后端分离的项目开发示例实战
  • C++算法代码-植物生长算法求解多目标车辆路径规划问题
  • 【递归,搜索与回溯算法篇】- 名词解释
  • C#零基础入门篇(18. 文件操作指南)
  • C51 Proteus仿真实验23:蜂鸣器播放音乐
  • 从PGC到AIGC:海螺AI多模态内容生成系统架构一站式剖析
  • 2025-3-17 腾讯云-大数据方向-成都面试
  • 黑马程序员-微服务开发-MybatisPlus的使用
  • 记一次wsl2+docker无法运行的经历
  • OSPF-8 OSPF特殊区域NSSA
  • PIC CCS编译器中的ATOI()、ATOL()和ATOI32()
  • QPrintDialog弹出慢的问题
  • 计算机技术系列博客——目录页(持续更新)