python的观察者模式案例

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

最近写安卓的代码比较多,了解了java代码的注册回调机制,也就是观察者模式,搜索了一下python也有这种模式设计,今天专门学习并总结了一下


提示:以下是本篇文章正文内容,下面案例可供参考

二、具体代码

代码如下(示例):

python 复制代码
class Observer:  # 构建一个观察者
    def update(self, observable, *args, **kwargs):
        pass


class Observable:  # 构建一个被观察者
    def __init__(self):
        self._observers = []

    def add_observer(self, observer):
        self._observers.append(observer)  # 添加观察者对象

    def remove_observer(self, observer):  # 移除观察者对象
        self._observers.remove(observer)

    def notify_observers(self, *args, **kwargs):  # 通知每一个观察者
        for observer in self._observers:
            observer.update(self, *args, **kwargs)  # 注意,这里的self传入的是对象本身


class TicketSystem(Observable):  # 票务系统类
    def __init__(self, ticket_price):
        super().__init__()
        self.__ticket_price = ticket_price

    @property
    def ticket_price(self):
        return self.__ticket_price

    @ticket_price.setter
    def ticket_price(self, price):
        self.__ticket_price = price
        self.notify_observers(price)


class User(Observer):  # 用户
    def update(self, observable, *args, **kwargs):
        print('user: {} is now ticket_price {}'.format(observable, args[0]))  # 这里的observable就是对象本身


class Scalper(Observer):  # 黄牛
    def update(self, observable, *args, **kwargs):
        print('scalper: {} is now ticket_price {}'.format(observable, args[0]))


if __name__ == '__main__':
    system = TicketSystem(18)  # 构建票务系统
    user_obj = User()  # 构建用户对象
    scalper_obj = Scalper()  # 构建黄牛对象

    system.add_observer(user_obj)  # 用户注册回调
    system.add_observer(scalper_obj)  # 黄牛注册回调

    system.ticket_price = 20  # 修改票价为20
    system.remove_observer(user_obj)  # 用户取消回调
    system.ticket_price = 15  # 修改票价为18

运行结果


写在结尾

我是一名车载集成测试开发工程师,希望能和志同道合的朋友一起相互学习进步

相关推荐
喵手1 小时前
Python爬虫实战:旅游数据采集实战 - 携程&去哪儿酒店机票价格监控完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集结果csv导出·旅游数据采集·携程/去哪儿酒店机票价格监控
2501_944934731 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
helloworldandy1 小时前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
肖永威3 小时前
macOS环境安装/卸载python实践笔记
笔记·python·macos
TechWJ3 小时前
PyPTO编程范式深度解读:让NPU开发像写Python一样简单
开发语言·python·cann·pypto
枷锁—sha3 小时前
【SRC】SQL注入WAF 绕过应对策略(二)
网络·数据库·python·sql·安全·网络安全
abluckyboy3 小时前
Java 实现求 n 的 n^n 次方的最后一位数字
java·python·算法
喵手4 小时前
Python爬虫实战:构建各地统计局数据发布板块的自动化索引爬虫(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集数据csv导出·采集各地统计局数据发布数据·统计局数据采集
天天爱吃肉82185 小时前
跟着创意天才周杰伦学新能源汽车研发测试!3年从工程师到领域专家的成长秘籍!
数据库·python·算法·分类·汽车
m0_715575345 小时前
使用PyTorch构建你的第一个神经网络
jvm·数据库·python