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

python的观察者模式案例

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

文章目录

  • 前言
  • 二、具体代码
  • 写在结尾


前言

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


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

二、具体代码

代码如下(示例):

class Observer:  # 构建一个观察者def update(self, observable, *args, **kwargs):passclass 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@propertydef ticket_price(self):return self.__ticket_price@ticket_price.setterdef ticket_price(self, price):self.__ticket_price = priceself.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  # 修改票价为20system.remove_observer(user_obj)  # 用户取消回调system.ticket_price = 15  # 修改票价为18

运行结果
在这里插入图片描述


写在结尾

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

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

相关文章:

  • C语言——类型转换
  • jmeter性能测试入门完整版
  • 报错sql_mode=only_full_group_by
  • 伪造 IP 地址的原理和防范措施
  • Linux通过libudev获取挂载路径、监控U盘热拔插事件、U盘文件系统类型
  • 【会议征稿】2023智能通信与网络国际学术会议(ICN 2023)
  • Android投屏总结
  • vue2 组件组成部分,组件通信,进阶语法
  • 信看课堂笔记—LDO和DC-DC电路打PK
  • C++ Day6
  • 分布式系统与微服务的区别是什么?
  • python:用python构建一个物联网平台
  • 基于Qt5开发图形界面——WiringPi调用Linux单板电脑IO
  • 【MySQL】组合查询
  • ChatGPT:引领人机交互的未来
  • 【算法】经典的八大排序算法
  • 防溺水预警识别系统算法
  • Redis 的整合 Jedis 使用
  • Mainline Linux 和 U-Boot编译
  • Mycat教程+面试+linux搭建
  • 基于工作过程的高职计算机网络技术专业课程体系构建策略
  • (笔记四)利用opencv识别标记视频中的目标
  • 一、计算机硬件选购
  • Dockerfile制作LAMP环境镜像
  • 暴力递归转动态规划(二)
  • debian apt error: Package ‘xxx‘ has no installation candidate
  • c#设计模式-结构型模式 之 外观模式
  • Focal Loss-解决样本标签分布不平衡问题
  • 运算符(个人学习笔记黑马学习)
  • 开源与专有软件:比较与对比