事件驱动的简明讲解(python实现)
2017-4-27
| 2023-7-17
0  |  0 分钟
type
status
date
slug
summary
tags
category
icon
password
举个简单的例子:
有些人喜欢的某个公众号,然后去关注这个公众号,哪天这个公众号发布了篇新的文章,没多久订阅者就会在微信里收到这个公众号推送的新消息,如果感兴趣就打开来阅读。
image
image
事件驱动模型可以理解为上面的例子,是设计模式中观察者模式的一种典型应用。除了订阅公众号外,如你关注某人的微博,关注某人的简书,当被关注者发了个新状态或者新文章,你会收到他们新的消息,这些都可以理解为事件驱动模型。
实际上,世间万物各种属性的变化,我们都可以抽象为事件,最直观的是图形界面应用里,如常见的点击、双击、拖动操作,又或者是游戏里的英雄升级了,怪物死亡了等等,都可以视为一个事件发生了。而发送事件的事物称为事件源,对这个事件感兴趣的事物为监听者,事件发生后监听者会收到这个消息,然后做相应的反应。
例如上面公众号例子可以翻译为,监听器(订阅者)监听了(关注了)事件源(公众号),当事件源的发送事件时(公众号发布文章),所有监听该事件的监听器(订阅者)都会接收到消息并作出响应(阅读文章)。
  1. 公众号为事件源
  1. 订阅者为事件监听器
  1. 订阅者关注公众号,相当于监听器监听了事件源
  1. 公众号发布文章这个动作为发送事件
  1. 订阅者收到事件后,做出阅读文章的响应动作
公众号例子按事件驱动可以理解成下图
image
image
所以事件驱动模式可以进一步抽象理解为由事件源,事件对象,以及事件监听器三元素构成,能完成监听器监听事件源、事件源发送事件,监听器收到事件后调用响应函数的动作。
事件驱动主要包含以下元素和操作函数:
元素
  1. 事件源
  1. 事件监听器
  1. 事件对象
操作函数 4. 监听动作 5. 发送事件 6. 调用监听器响应函数
了解清楚了事件驱动的工作原理后,读者可以试着用自己熟悉的编程语言实现,编程主要实现下面的内容,笔者后续给python实现:
用户根据实际业务逻辑定义
  • 事件源 EventSources
  • 监听器 Listeners
事件管理者 EventManager
成员
  1. 响应函数队列 Handlers
  1. 事件对象 Event
  1. 事件对象列表 EventQueue
操作函数 4. 监听动作 AddEventListener 5. 发送事件 SendEvent 6. 调用响应函数 EventProcess
在实际的软件开发过程中,你会经常看到事件驱动的影子,几乎所有的GUI界面都采用事件驱动编程模型,很多服务器网络模型的消息处理也会采用,甚至复杂点的数据库业务处理也会用这种模型,因为这种模型解耦事件发送者和接收者之间的联系,事件可动态增加减少接收者,业务逻辑越复杂,越能体现它的优势。下面,笔者用python实现EventManager事件管理类,大概就百来行代码左右。
测试代码
设计模式
Python进阶之迭代器和生成器配置程序成为Linux服务
目录