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

【Python3】观察者模式

观察者模式(Observer Pattern)是一种常见的设计模式,用于定义对象之间的一对多依赖关系,使得一个对象的状态改变能够通知所有依赖于它的对象并自动更新。

在观察者模式中,有两个核心角色:

  1. Subject(主题):也称为被观察者,它维护一组观察者对象,并提供添加、删除和通知观察者的方法。当主题状态发生变化时,会通知所有注册的观察者。

  2. Observer(观察者):观察主题的对象,当主题状态发生变化时,观察者会接收到更新通知,并进行相应的处理操作。

观察者模式的优点包括:

  • 解耦性:主题和观察者之间是松耦合的关系,主题无需知道观察者的具体实现,只需通知观察者即可。
  • 可扩展性:可以方便地增加新的观察者或主题,而不影响已有代码。
  • 通知机制:观察者模式提供了一种简单且可靠的通知机制,确保观察者能及时获得主题状态的变化。

在实际应用中,观察者模式被广泛应用于GUI编程、事件处理机制、发布订阅系统等场景,其中对象间的状态变化需要被动态通知其他对象。

class Subject:def __init__(self):self._observers = []def attach(self, observer):if observer not in self._observers:self._observers.append(observer)def detach(self, observer):try:self._observers.remove(observer)except ValueError:passdef notify(self, message):for observer in self._observers:observer.update(message)class Observer:def update(self, message):print("Received message:", message)# 创建主题和观察者对象
subject = Subject()
observer1 = Observer()
observer2 = Observer()# 将观察者对象注册到主题
subject.attach(observer1)
subject.attach(observer2)# 发送通知
subject.notify("Hello, observers!")# 分离观察者对象
subject.detach(observer2)# 再次发送通知
subject.notify("Another message")

在上面的示例中,我们首先定义了 Subject 类和 Observer 类。Subject 类维护了一组观察者对象,并提供了注册、注销和通知观察者的方法。Observer 类定义了观察者对象,其中包含了更新方法 update

然后,我们创建了一个主题对象和两个观察者对象,并将观察者对象注册到主题。随后,我们通过主题对象发送通知,并观察观察者对象的响应。

http://www.lryc.cn/news/317570.html

相关文章:

  • HTML5 Web Worker之性能优化
  • 应对恶意IP攻击的有效方法
  • 如何使用“Docker registry创建本地仓库,在服务器之间进行文件push和pull”?
  • Rocky Linux - Primavera P6 EPPM 安装及分享
  • API 管理调研
  • 在centOS服务器安装docker,并使用docker配置nacos
  • JVM运行时数据区概述以及分别存放的内容
  • 数据体系规范化
  • 从政府工作报告探计算机行业发展
  • 【软件工具】网络性能测试工具 Iperf
  • Day32:安全开发-JavaEE应用Servlet路由技术JDBCMybatis数据库生命周期
  • C语言下使用SQL语言
  • Gitea相关漏洞
  • 基于深度学习的图像去雨去雾
  • 使用JS的for循环实现九九乘法表
  • Leetcode 70 爬楼梯
  • 基于SpringBoot+MYSQL+Vue的校园管理系统
  • Oracle P6 负浮时和必须完成日期
  • 【C++】STL--String
  • 深入理解与使用go之中间件--实现
  • 移动端研发技术的进化历程
  • ChromeDriver 122 版本为例 国内下载地址及安装教程
  • 【数据结构】双向链表及LRU缓存的实现
  • 2、计划任务不显示UI的问题
  • 学C还是学C++?
  • Springboot参数分组校验
  • 无缝集成 MongoDB Relational Migrator,Tapdata 提供关系型到 MongoDB 实时迁移优化方案
  • 【C++】每日一题 146 LRU缓存
  • CentOS搭建NAS服务器并使用
  • 爬虫入门到精通_框架篇16(Scrapy框架基本使用)_名人名言的抓取