python设计模式--观察者模式

news/2024/9/23 22:38:05/

观察者模式是一种行为设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象状态发生变化时,会通知所有观察者对象,使它们能够自动更新。

在 Python 中,观察者模式通常由两个主要角色组成:
1. **主题(Subject)**:主题对象维护一组观察者对象,并提供方法来注册、删除和通知观察者对象。
2. **观察者(Observer)**:观察者对象监听主题对象的状态变化,并在主题对象状态发生变化时接收通知并做出相应的更新。

Python 中实现观察者模式
```python
class Subject:
    def __init__(self):
        self._observers = []

    def register_observer(self, observer):
        self._observers.append(observer)

    def unregister_observer(self, observer):
        self._observers.remove(observer)

    def notify_observers(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.register_observer(observer1)
subject.register_observer(observer2)

# 主题对象状态变化,通知观察者
subject.notify_observers("Hello, observers!")
```

示例中,Subject 类代表主题对象,Observer 类代表观察者对象。当主题对象状态发生变化时,调用 notify_observers() 方法通知所有注册的观察者对象,观察者对象接收到通知后调用 update() 方法进行更新操作。

观察者模式可以帮助实现对象之间的松耦合,使主题对象和观察者对象之间的关系更加灵活。通过这种方式,可以实现事件驱动的编程模式,提高代码的可维护性和扩展


http://www.ppmy.cn/news/1463757.html

相关文章

前后端项目部署和解决跨域

文章目录 一.前端项目部署1.1 上传前端文件1.2 项目部署1.3 解决跨域1.3.1 什么是跨域1.3.2 配置文件 二.后端项目部署2.1 上传后端文件2.2 项目部署2.3 解决跨域 一.前端项目部署 1.1 上传前端文件 站点创建好了,进入到站点的目录。 然后把它默认的文件删掉。 你…

大数据开发面试题【Spark篇】

115、Spark的任务执行流程 driver和executor,结构式一主多从模式, driver:spark的驱动节点,用于执行spark任务中的main方法,负责实际代码的执行工作;主要负责:将代码逻辑转换为任务、在executo…

OSPF原理(1)

一、OSPF介绍 OSPF(Open Shortest Path First,开放最短路径优先)协议作为一种基于链路状态的路由协议,它为网络中的路由器提供了一种高效、可靠的方式来共享路由信息,并计算出最短路径。 特点: 收敛速度快…

推荐系统学习笔记(四)--基于向量的召回

离散特征处理 离散特征:性别,国籍,英文单词,物品id,用户id 处理: 建立字典:eg:china 1 向量化:eg:one-hot /embedding(低维稠密向量&#xf…

【数据结构】数据结构中的隐藏玩法——栈与队列

前言: 哈喽大家好,我是野生的编程萌新,首先感谢大家的观看。数据结构的学习者大多有这样的想法:数据结构很重要,一定要学好,但数据结构比较抽象,有些算法理解起来很困难,学的很累。我…

在某云服务器上搭建公网kali linux2.0

前提: 可用的 CVM 实例 挂载一个系统盘之外的盘,安装完成后可卸载! 创建实例,安装centos7系统! 然后执行fdisk -l看磁盘的情况 在这里我将把镜像写入vdb这块数据盘 非 root 的情况下记得sudo执行以下命令 注意&…

质量评估门户:您AI内容的质量守护者

在当今这个内容饥渴和内容疯狂的世界里,AI驱动的内容创作既是一种流行趋势,有时也是一个改变游戏规则的存在。但强大的能力伴随着巨大的责任……即确保质量的责任。 想象一下:你拥有一个AI[和创意团队],他们以闪电般的速度输出博…

离线初始化k8s

导出和导入所有必要的 Kubernetes 镜像,使用阿里云作为源。 在能访问外网的机器上拉取镜像 首先,在有外网访问的机器上运行以下命令来拉取所有 Kubernetes v1.29.5 版本需要的镜像: kubeadm config images pull --image-repository regist…