首页 > 编程语言 >Python 设计模式-观察者模式

Python 设计模式-观察者模式

时间:2023-05-21 18:13:34浏览次数:37  
标签:__ observer Python self 观察者 update 设计模式 subject

观察者模式是一种行为设计模式,它允许你定义一种订阅机制,可以在对象事件发生时通知多个观察者对象。下面是一个简单的Python观察者模式代码示例:

class Subject:
    """
    被观察者类,维护观察者列表,并在状态发生改变时通知观察者
    """
    def __init__(self):
        self._observers = set()

    def attach(self, observer):
        """
        将观察者添加到观察者列表中
        """
        self._observers.add(observer)

    def detach(self, observer):
        """
        将观察者从观察者列表中移除
        """
        self._observers.remove(observer)

    def notify(self, message):
        """
        通知所有观察者,传递消息
        """
        for observer in self._observers:
            observer.update(message)


class Observer:
    """
    观察者类,定义一个update方法,当被观察者发生变化时被调用
    """
    def update(self, message):
        pass


class ConcreteObserver(Observer):
    """
    具体观察者类,实现update方法,当被观察者发生变化时打印消息
    """
    def update(self, message):
        print(f"Received message: {message}")


if __name__ == '__main__':
    subject = Subject()
    observer_1 = ConcreteObserver()
    observer_2 = ConcreteObserver()

    subject.attach(observer_1)
    subject.attach(observer_2)

    subject.notify("Hello, observers!")

在上面的代码中,我们定义了一个被观察者类Subject和一个观察者类ObserverSubject维护了一个观察者列表_observers,并提供了attachdetachnotify方法来添加、移除和通知观察者。Observer定义了一个update方法,当被观察者发生变化时被调用。

我们还定义了一个具体观察者类ConcreteObserver,它实现了update方法,当被观察者发生变化时打印消息。

main函数中,我们创建了一个被观察者对象subject和两个观察者对象observer_1observer_2,并将它们添加到被观察者对象的观察者列表中。最后,我们调用subject.notify方法,通知所有观察者对象,并传递了一个消息。观察者对象收到消息后,会执行自己的逻辑,这里我们只是简单地打印了一条消息。

标签:__,observer,Python,self,观察者,update,设计模式,subject
From: https://www.cnblogs.com/l806760/p/17418920.html

相关文章

  • 【python】使用pyinstaller打包python程序为exe【转】
    pyinstaller介绍PyInstaller除了win32平台外还支持Linux,Unix平台.py2exe的用法在前面的博文里已经有了,现在看看PyInstaller,pyinstaller是目前应用最多的python打包工具,也是我最常用的。PyInstaller本身并不是Python模块,所以安装时随便放在哪儿都行。优点:可将python文件转......
  • 5年Python生涯总结出10个玩Python必备的网站
    “玩Python必备的10大精品网站”5年Python沉淀,总结一下作为一个Python玩家,必须要知道的十大精品网站。无用请吐槽!有用请点赞!!爱我请三连!!!目录一、模块查询二、闯关游戏三、Django教程四、Python资源大全五、数据/竞赛/学习六、Python语法/项目经验七、Flask资料大全八、机器学习中文......
  • Python数据加密方法详解|为你的隐私再上一把锁!
    前言数字化时代下,数据安全是各大公司及个人最关心的一点,作为一个Python语言使用者我们该如何进行数据的加密呢?本文二哥领着大家来了解一下。目录前言一、数据加密的概念二、直接编码加密三、Binascii编码加密三、Base64编码加密四、URL编码加密五、Hashlib加密1、MD52、SHA1加密六......
  • 左程云动态规划问题学习(python版本重写)
    哔哩哔哩:6.二次优化(3)_哔哩哔哩_bilibili第一个版本对动态规划的理解#问题有大量的重复问题,比如求feibolaqie(5)=feibolaqie(4)+feibolaqie(3),#所以有重复问题,通过缓存优化,把以前求过的问题做缓存#deffeibolaqie(n):#ifn==1:#return1#eli......
  • python爬取《肖申克的救赎》电影演员
    importrequestsfrombs4importBeautifulSoup#豆瓣电影页面链接url='https://movie.douban.com/subject/1292052/'#设置请求头信息,模拟浏览器请求headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,lik......
  • python-docx - 3
    1.样式1.1访问样式使用Document.styles属性访问样式。fromdocximportDocumentdocument=Document()#获取样式对象,这里面可以像字典一样访问,也可以迭代styles=document.stylesforstyleinstyles:print(style.name,"\t",style.type)#获取一个正文样式......
  • Python使用pip安装第三方包
    ​ 参考文章:如何安装第三方的Python包?-知乎​pipinstall-i网址包名称例如:pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simple/numpy常用的网址有:清华:https://pypi.tuna.tsinghua.edu.cn/simple/阿里云:http://mirrors.aliyun.com/pypi/simple/......
  • Python安装教程
    Python安装教程https://zhuanlan.zhihu.com/p/569019068python下载https://www.python.org/downloads/windows/pycharm下载https://www.jetbrains.com/pycharm/download/#section=windows配置https://zhuanlan.zhihu.com/p/587849846?utm_id=0......
  • python 云服务器部署 flask 项目
    测试模式,非生产模式1.修改host和port 2.上传项目 3.下载python项目管理器  4.创建项目 5.开放端口,远程连接数据库......
  • 深入理解 python 虚拟机:魔术方法之数学计算
    深入理解python虚拟机:魔术方法之数学计算在本篇文章当中主要给大家介绍在python当中一些常见的魔术方法,本篇文章主要是关于与数学计算相关的一些魔术方法,在很多科学计算的包当中都使用到了这些魔术方法。大小比较当我们在Python中定义自己的类时,可以通过重写一些特殊方法来......