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

设计模式的艺术-观察者模式

行为型模式的名称、定义、学习难度和使用频率如下表所示:

1.如何理解观察者模式

  1. 一个对象的状态或行为的变化将导致其他对象的状态或行为也发生改变,它们之间将产生联动,正所谓“触一而牵百发”。为了更好地描述对象之间存在的这种一对多(包括一对一)的联动,观察者模式应运而生。

  2. 观察者模式是使用频率最高的设计模式之一,用于建立对象与对象之间的依赖关系。一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应。在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称为观察者

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

  4. 观察者模式是一种使用频率非常高的设计模式,无论是移动应用、Web应用或者桌面应用,观察者模式几乎无处不在。它为实现对象之间的联动提供了一套完整的解决方案,凡是涉及一对一或者一对多的对象交互场景都可以使用观察者模式。观察者模式广泛应用于各种编程语言的GUI事件处理的实现,在基于事件的XML解析技术(例如SAX2)以及Web事件处理中也都使用了观察者模式。、

2.如何理解GUI事件

  1. 指的是在图形用户界面(如 Windows 操作系统的窗口、Mac 系统的界面、网页的界面等)中发生的用户操作或系统状态的变化。

  2. 比如,用户用鼠标点击一个按钮、在文本框中输入文字、拖动滚动条,或者窗口的大小被改变、系统定时触发的更新操作等,这些都是 GUI 事件。

  3. GUI 事件的处理是实现用户与计算机交互的关键部分,它使得用户能够通过直观的操作来控制程序的行为和获取所需的结果。

3.观察者模式的优缺点

优点

  1. 灵活性和可扩展性:可以方便地添加新的观察者,而不需要修改主题的代码。
  2. 广播通信:一个主题的变化可以同时通知多个观察者,实现了高效的信息传播。

  3. 支持动态组合:观察者可以在运行时动态地决定是否订阅或取消订阅主题的通知。

  4. 解耦:主题和观察者之间的耦合度低,它们不需要知道对方的内部实现细节,只通过定义好的接口进行交互。

缺点

  1. 通知顺序问题:观察者接收通知的顺序可能是不确定的,这在某些对顺序有严格要求的场景下可能会产生问题。

  2. 性能开销:当观察者数量众多时,通知所有观察者可能会带来一定的性能开销,特别是如果观察者的更新操作比较复杂。

4.观察者模式的适用场景

  1. 分布式系统中的事件通知:在分布式环境中,不同的组件或服务之间需要进行通信和协调。当某个组件发生重要事件时,可以使用观察者模式通知其他相关组件。

  2. 界面交互:例如在图形用户界面中,当某个控件的状态发生变化(如按钮被点击、文本框内容改变等),需要通知其他相关的控件或执行相应的操作。

  3. 消息推送:类似于新闻推送、社交媒体的更新通知等,当有新的内容产生时,推送给订阅的用户。

  4. 模型 - 视图 - 控制器(MVC)架构:在 MVC 架构中,模型(数据)的变化可以通过观察者模式通知视图进行更新。

  5. 数据监听器:在数据处理中,当数据发生变化(如数据库中的数据更新、缓存数据的变更等),通知相关的处理模块进行相应的操作。

以上内容为根据书本内容配合搜索引擎整理得来,目的是为了学习,要是有侵权的情况发生,请联系我,我会立即予以删除,谢谢!

一起成长,人生是马拉松,可以跑得慢,但一定要在路上。


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

相关文章:

  • 在线课堂小程序设计与实现(LW+源码+讲解)
  • Vue.js `setup()` 函数的使用
  • gesp(C++六级)(6)洛谷:P10109:[GESP202312 六级] 工作沟通
  • 1.26学习
  • SpringBoot 中的测试jar包knife4j(实现效果非常简单)
  • Python实现U盘数据自动拷贝
  • (done) ABI 相关知识补充:内核线程切换、用户线程切换、用户内核切换需要保存哪些寄存器?
  • MATLAB中extractAfter函数用法
  • Git进阶之旅:Git 命令
  • Django ORM解决Oracle表多主键的问题
  • 全程Kali linux---CTFshow misc入门(1-12)
  • CMake常用命令指南(CMakeList.txt)
  • Vue 3 30天精进之旅:Day 07 - Vue Router
  • 【Python百日进阶-Web开发-FastAPI】Day812 - FastAPI Cookie 参数、Header 参数
  • 运用python爬虫爬取汽车网站图片并下载,几个汽车网站的示例参考
  • 一个python项目中的文件和目录的作用是什么?scripts,venv,predict的具体含义
  • GO 高级特性篇
  • 常见端口的攻击思路
  • 爱书爱考平台说明
  • C#操作GIF图片(上)
  • python+playwright自动化测试(八):iframe切换、多窗口切换
  • Go Fx 框架使用指南:深入理解 Provide 和 Invoke 的区别
  • 单片机基础模块学习——AT24C02芯片
  • open-webui本地AI人工智能问答知识库搭建
  • 云计算与虚拟化技术讲解视频分享
  • 【赵渝强老师】K8s中Pod探针的ExecAction