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

观察者模式

观察者模式常常用于以下场景:

  1. 事件驱动系统:当事件发生时,通知所有对该事件感兴趣的观察者。

  1. 发布/订阅模型:一个主题(发布者)可以有多个订阅者(观察者),当主题发生改变时,通知所有订阅者。

  1. GUI编程:当GUI组件状态发生改变时,通知对该组件感兴趣的观察者(例如,当用户单击按钮时,可以通知所有与该按钮关联的处理程序)。

  1. 消息队列系统:在消息队列系统中,观察者模式用于订阅者从队列中获取消息的方式,当消息可用时,通知所有订阅者。

总之,观察者模式适用于任何需要多个对象之间协作的场景,以便在对象之间保持松散耦合。

下面是一个简单的观察者模式的示例代码:

class Subject:def __init__(self):self._observers = []def attach(self, observer):self._observers.append(observer)def detach(self, observer):self._observers.remove(observer)def notify(self, message):for observer in self._observers:observer.update(message)class Observer:def update(self, message):print(f'Received message: {message}')subject = Subject()
observer1 = Observer()
observer2 = Observer()subject.attach(observer1)
subject.attach(observer2)subject.notify('Hello world')subject.detach(observer1)subject.notify('Goodbye')

执行过程如下:

  1. 定义了一个 Subject 主题类,其中包含了一组观察者 _observers,以及 attach()detach()notify() 方法用于添加、删除观察者和通知观察者。

  1. 定义了一个 Observer 观察者类,其中包含了一个 update() 方法用于处理接收到的通知消息。

  1. 创建了一个 Subject 实例 subject 和两个 Observer 实例 observer1observer2

  1. 调用 subject.attach(observer1)subject.attach(observer2) 将观察者注册到主题中。

  1. 调用 subject.notify('Hello world') 向所有已注册的观察者发送消息,观察者会调用自己的 update() 方法进行处理。

  1. 调用 subject.detach(observer1)observer1 观察者从主题中删除。

  1. 调用 subject.notify('Goodbye') 向所有已注册的观察者发送消息,但是 observer1 不会收到该消息,只有 observer2 会调用自己的 update() 方法进行处理。

相关文章:

观察者模式

观察者模式常常用于以下场景:事件驱动系统:当事件发生时,通知所有对该事件感兴趣的观察者。发布/订阅模型:一个主题(发布者)可以有多个订阅者(观察者),当主题发生改变时&…...

前端组件库自定义主题切换探索-03-webpack-theme-color-replacer webpack 同时替换多个颜色改造

接上一篇《前端组件库自定义主题切换探索-02-webpack-theme-color-replacer webpack 的实现逻辑和原理-02》 这篇我们来开始改造,让这个插件最终能达到我们的目的: 首先修改plugin.config.js。 插件首先要在vue.config.js引用注册,因此先对…...

Redis高级-主从复制相关操作

2.1 主从复制简介 2.1.1 高可用 首先我们要理解互联网应用因为其独有的特性我们演化出的三高架构 高并发 应用要提供某一业务要能支持很多客户端同时访问的能力,我们称为并发,高并发意思就很明确了 高性能 性能带给我们最直观的感受就是:速…...

SPI总线设备驱动模型

SPI总线设备驱动模型 文章目录SPI总线设备驱动模型参考资料:一、平台总线设备驱动模型二、 数据结构2.1 SPI控制器数据结构2.2 SPI设备数据结构2.3 SPI设备驱动三、 SPI驱动框架3.1 SPI控制器驱动程序3.2 SPI设备驱动程序致谢参考资料: 内核头文件&…...

开发同事辞职,接手到垃圾代码怎么办?

小王新加入了一家公司,这家公司有点年头,所以连屎山都是发酵过的,味道很冲。和大多数时运不济的程序员一样,到了这种公司,做的大多数工作,就是修补这些祖传代码,为其添砖加瓦。每当被折腾的筋疲…...

gRPC简介

grpc简介 grpc介绍可以参考官网。无论是rpc还是grpc,可以这样理解,都知道过去使用的单单体架构,而在2011年5月威尼斯的一个软件架构会议上提出了微服务架构,围绕业务功能进行组织(organized around business capability)&#xf…...

《MySQL系列-InnoDB引擎25》表-InnoDB逻辑存储结构

InnoDB逻辑存储结构 从InnoDB存储引擎的逻辑存储结构看,所有数据都被逻辑地存放在一个空间中,称之为表空间(tablespace)。表空间又由段(segment)、区(extent)、页(page)组成。页在一些文档中有时也称为块(block),InnoDB存储引擎的逻辑存储结构…...

YOLOv8之C2f模块——与YOLOv5的C3模块对比

一、源码对比 YOLOv8完整工程代码下载:ultralytics/ultralytic   C2f模块源码在ultralytics/nn/modules.py下,源码如下: class C2f(nn.Module):# CSP Bottleneck with 2 convolutionsdef __init__(self, c1, c2, n1, shortcutFalse, g1, e…...

动态规划实例——换零钱的方法数(C++详解版)

原写了 Java 版本的如何求解换钱的方法数,近期进行了一些细节上的补充,以及部分错误更正,将语言换为了 C 语言。 基础题目 假设你现在拥有不限量的 1 元、5 元、10 元面值纸币,路人甲希望找你换一些零钱,路人甲拿出的…...

linux c

射频驱动 管理硬件设备、分配系统资源 内核由中断服务程序 调度程序 内存管理程序 网络和进程间进程通信程序 linux支持动态加载内核模块 支持多处理smp机制 内核可以抢占preemptive linux系统拥有多个发行版,可能由一个组织 公司和个人发行 VGA兼容或者更…...

第十三章 系统错误消息 - 一般系统错误消息 S - Z

文章目录第十三章 系统错误消息 - 一般系统错误消息 S - Z第十三章 系统错误消息 - 一般系统错误消息 S - Z 错误代码描述<SUBSCRIPT>下标值不合法或Global引用过长。<SWIZZLE FAIL>打开了一个oref&#xff0c;然后试图在另一个无法引用的相关对象中进行搅拌。这可…...

移动web基础

初始缩小&#xff1a;布局视口大于视觉视口 初始放大&#xff1a;布局视口小于视觉视口 布局视口等于视觉视口&#xff08;这种动作行为叫做理想视口&#xff09; <meta name"viewport" content"width375" /> <meta name"viewport"…...

MyBatis和MyBatis_Plus有什么区别【面试常考题】

MyBatis和MyBatis_Plus的区别 MyBatis_Plus MyBatis_Plus 是一个 MyBatis 的增强工具&#xff0c;只是在 MyBatis 的基础上增强了却没有做改变&#xff0c;MyBatis-Plus支持所有MyBatis原生的特性&#xff0c;所有引入MyBatis-Plus不会对现有的MyBatis框架产生任何影响。 MyBa…...

华为OD机试用Python实现 -【统一限载货物数最小值】(2023-Q1 新题)

华为OD机试题 华为OD机试300题大纲统一限载货物数最小值题目描述输入描述输出描述说明示例一输入输出说明示例二输入输出说明Python 代码实现算法逻辑华为OD机试300题大纲 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查…...

Vue入门小练习

文章目录Hello VueVue文本指令Vue属性绑定Vue双向绑定Vue事件绑定Vue猜数字Vue简单计算器Vue简单计算器升级版Vue循环遍历Vue员工列表练习Vue小练习Vue显示隐藏相关使用一些简单的小案例来熟悉Vue的基本使用方法 Hello Vue <!DOCTYPE html> <html lang"en"…...

Oracle-09-集合运算符篇

2022年4月13日23:01:25 通过本章学习,您将可以:1、描述 SET 操作符2、将多个查询用 SET 操作符连接组成一个新的查询目录 🏆一、SET OPERATORS ⭐️1.1、UNION /UNION ALL ⭐️1.2、INSTERSECT ⭐️1.3、MINUS dz...

获取浏览器(服务端)请求中特定的Cookie

有必要解释一下HttpServletRequest接口&#xff0c;因为我们需要从它里面获取Cookie。 HttpServletRequest HttpServletRequest是一个Java接口&#xff0c;提供了访问HTTP请求信息的方法&#xff0c;例如HTTP方法、请求URI、头部、参数和会话属性。它是Java Servlet API的一部…...

c++11 标准模板(STL)(std::unordered_set)(九)

定义于头文件 <unordered_set>template< class Key, class Hash std::hash<Key>, class KeyEqual std::equal_to<Key>, class Allocator std::allocator<Key> > class unordered_set;(1)(C11 起)namespace pmr { templat…...

python实战应用讲解-【实战应用篇】文件操作(附python示例代码)

目录 知识储备 使用 python-libarchive-c 模块 创建压缩文件 解压文件 查看信息...

OpenCV-Python系列(二)—— 图像处理(灰度图、二值化、边缘检测、高斯模糊、轮廓检测)

一、【灰度图、二值化】 import cv2 img cv2.imread("lz2.png") gray_img cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 灰度图 # 二值化&#xff0c;(127,255)为阈值 retval,bit_img cv2.threshold(gray_img, 127, 255, cv2.THRESH_BINARY) cv2.imshow(photo1,im…...

HsMod炉石插件:如何彻底改变你的炉石传说游戏体验?

HsMod炉石插件&#xff1a;如何彻底改变你的炉石传说游戏体验&#xff1f; 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod 还在为炉石传说游戏中的等待时间而烦恼吗&#xff1f;HsMod这款基…...

Vit工程化应用(transformers 库)

pip install transformersfrom transformers import ViTImageProcessor, ViTForImageClassification from PIL import Image import requests# 1. 加载模型和特征提取器 model_name google/vit-base-patch16-224 processor ViTImageProcessor.from_pretrained(model_name) mo…...

KouriChat + DeepSeek + 微信接入:本地 AI 角色聊天机器人搭建实录

&#x1f381;个人主页&#xff1a;User_芊芊君子 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 &#x1f50d;系列专栏&#xff1a;AI 文章目录&#xff1a; 前言1 KouriChat项目简介2 环境准备3 环境安装及项目部署3.1 Python3.11 安装3.2 启动KouriC…...

用OpenCV搭建可落地的图像数据采集系统

1. 项目概述&#xff1a;用 OpenCV 搭建轻量级图像采集工作站&#xff0c;不是写个 demo 而是建一套能落地的数据生产线你有没有遇到过这种场景&#xff1a;刚立项一个手势识别项目&#xff0c;团队兴奋地讨论模型结构、损失函数、训练策略&#xff0c;结果一问“数据呢&#x…...

统一内存引擎:异构计算时代的内存管理革命

1. 项目概述&#xff1a;统一内存引擎的诞生背景与核心价值最近在分布式系统和数据库领域&#xff0c;一个名为chenxi-lee/unified-memory-engine的项目引起了我的注意。乍一看这个标题&#xff0c;可能会觉得它又是一个内存池或者缓存组件&#xff0c;但深入研究后你会发现&am…...

Tera数据库:从入门到精通,打造互联网级分布式存储系统

Tera数据库&#xff1a;从入门到精通&#xff0c;打造互联网级分布式存储系统 【免费下载链接】tera An Internet-Scale Database. 项目地址: https://gitcode.com/gh_mirrors/ter/tera Tera数据库是一个高性能的分布式NoSQL数据库系统&#xff0c;专为处理互联网规模的…...

基于MCP协议构建垂直领域AI知识服务:猴头菇茶MCP服务器实战

1. 项目概述与核心价值最近在折腾AI Agent的开发&#xff0c;发现一个挺有意思的项目&#xff0c;叫jackrain19743/hou-tea-mcp-server。乍一看这个名字&#xff0c;可能会有点摸不着头脑&#xff0c;“hou-tea”是啥&#xff1f;其实这是一个基于Model Context Protocol&#…...

2026届最火的十大AI辅助写作平台解析与推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在当下这个学术环境当中&#xff0c;AI辅助论文的写作已然变成了一种具备高效性的工具。借助…...

视频字幕提取神器:如何让AI帮你自动转录硬字幕?

视频字幕提取神器&#xff1a;如何让AI帮你自动转录硬字幕&#xff1f; 【免费下载链接】video-subtitle-extractor 视频硬字幕提取&#xff0c;生成srt文件。无需申请第三方API&#xff0c;本地实现文本识别。基于深度学习的视频字幕提取框架&#xff0c;包含字幕区域检测、字…...

AI时代数据中心架构变革:从计算中心到加速基础设施

1. 从“计算中心”到“加速基础设施”&#xff1a;数据中心架构的范式转移最近和几个在头部云厂商做架构设计的老朋友聊天&#xff0c;话题总绕不开一个词&#xff1a;加速基础设施。这词儿听起来挺高大上&#xff0c;但说白了&#xff0c;就是咱们传统数据中心那套“通用计算存…...