事件驱动的简明讲解

关键词:编程范式,事件驱动,回调函数,观察者模式

举个简单的例子:
有些人喜欢的某个公众号,然后去关注这个公众号,哪天这个公众号发布了篇新的文章,没多久订阅者就会在微信里收到这个公众号推送的新消息,如果感兴趣就打开来阅读。

事件驱动模型可以理解为上面的例子,是设计模式中观察者模式的一种典型应用。除了订阅公众号外,如你关注某人的微博,关注某人的简书,当被关注者发了个新状态或者新文章,你会收到他们新的消息,这些都可以理解为事件驱动模型。

实际上,世间万物各种属性的变化,我们都可以抽象为事件,最直观的是图形界面应用里,如常见的点击、双击、拖动操作,又或者是游戏里的英雄升级了,怪物死亡了等等,都可以视为一个事件发生了。而发送事件的事物称为事件源,对这个事件感兴趣的事物为监听者,事件发生后监听者会收到这个消息,然后做相应的反应。

例如上面公众号例子可以翻译为,监听器(订阅者)监听了(关注了)事件源(公众号),当事件源的发送事件时(公众号发布文章),所有监听该事件的监听器(订阅者)都会接收到消息并作出响应(阅读文章)。

1.公众号为事件源
2.订阅者为事件监听器
3.订阅者关注公众号,相当于监听器监听了事件源
4.公众号发布文章这个动作为发送事件
5.订阅者收到事件后,做出阅读文章的响应动作

公众号例子按事件驱动可以理解成下图

所以事件驱动模式可以进一步抽象理解为由事件源,事件对象,以及事件监听器三元素构成,能完成监听器监听事件源、事件源发送事件,监听器收到事件后调用响应函数的动作。

事件驱动主要包含以下元素和操作函数:
元素
1.事件源
2.事件监听器
3.事件对象

操作函数
4.监听动作
5.发送事件
6.调用监听器响应函数

了解清楚了事件驱动的工作原理后,读者可以试着用自己熟悉的编程语言实现,编程主要实现下面的内容,笔者后续给python实现

用户根据实际业务逻辑定义
事件源 EventSources
监听器 Listeners

事件管理者 EventManager
成员
1.响应函数队列 Handlers
2.事件对象 Event
3.事件对象列表 EventQueue
操作函数
4.监听动作 AddEventListener
5.发送事件 SendEvent
6.调用响应函数 EventProcess

在实际的软件开发过程中,你会经常看到事件驱动的影子,几乎所有的GUI界面都采用事件驱动编程模型,很多服务器网络模型的消息处理也会采用,甚至复杂点的数据库业务处理也会用这种模型,因为这种模型解耦事件发送者和接收者之间的联系,事件可动态增加减少接收者,业务逻辑越复杂,越能体现它的优势。笔者后续文章会讲解这种模式的应用场景和它的优势。

时间: 2024-10-10 15:35:57

事件驱动的简明讲解的相关文章

linux命令之ls命令的简明讲解

我详细熟悉linux操作系统的同学对ls命令是再熟悉不过了 因为我们通常使用该命令查看某个目录下的文件 其命令形式是: ls [选项] 目录或者文件 本文中主要讲解两个最常用的选项: -l:用于列出文件的详情 -a:用于列出隐藏的文件 首先使用ls -l对vpoet当前用户家目录列出所有文件详情,但是不包括隐藏文件. 使用ls -a列出该目录下所有隐藏的文件,仅仅列出文件名而已 看吧,前面带"."的文件就是隐藏文件 通常情况下我们将-a -l选项连用来显示包括隐藏文件在内的所有详情 现

iOS 创建Git 提交到GitHub 简明讲解配步骤图

本文主要讲解下面四点,可以满足大部分开发新手老手的需要,欢迎讨论反馈! 一.创建项目时,勾选git来创建项目Git源 二.创建项目时,未勾选git的项目,创建Git源 三.第一次提交gitHub,创建代码仓库 四.本地有git源项目,提交到gitHub仓库 参考文章: 在Xcode中使用Git进行源码版本控制 使用Xcode上传代码至GitHub 一.创建项目时,就勾选了git的项目 在创建工程的最后一步Xcode会有一个复选框,如果选择了它,git源就会被添加到工程目录中. 1.打开Xcode

信号处理中数字频率和模拟频率简明讲解

数字频率和模拟频率 在数字信号处理的学习中,很多刚入门朋友常常为模拟频率.数字频率及其相互之间的关系所迷惑,甚至是一些已经对数字信号处理有所了解的朋友也为这个问题所困惑. 我们通常所说的频率,在没有特别指明的情况下,指的是模拟频率,其单位为赫兹(Hz),或者为1/秒(1/s),数学符号用f来表示.这是因为现实世界中的信号大多为模拟信号,频率是其重要的物理特性.以赫兹表示的模拟频率表示的是每秒时间内信号变化的周期数.如果用单位圆表示的话,如图1所示,旋转一圈表示信号变化一个周期,则模拟频率则指的是

事件驱动的Python实现

EventManager事件管理类实现,大概就百来行代码左右.如果有不了事件驱动的工作原理的可以看前一篇<事件驱动的简明讲解> # encoding: UTF-8 # 系统模块 from Queue import Queue, Empty from threading import * ######################################################################## class EventManager: #-----------

事件驱动模型实例详解(Java篇)

或许每个软件从业者都有从学习控制台应用程序到学习可视化编程的转变过程,控制台应用程序的优点在于可以方便的练习某个语言的语法和开发习惯(如.net和java),而可视化编程的学习又可以非常方便开发出各类人机对话界面(HMI).可视化编程或许是一个初学者开始对软件感兴趣的开始,也可能是一个软件学习的里程碑点,因为我们可以使用各类软件集成开发环境(IDE)方便的在现成的界面窗口上拖放各类组件(Component),这类组件包括我们常见的按钮(Button),单选按钮(Radio Button),复选框

事件驱动

事件驱动——有事我叫你,没事别烦我 劳心者治人 , 劳力者治于人                                            ——<孟子·滕文公上>   关键词:编程范式 , 事件驱动式 , 回调函数 ,framework,IoC,DIP, 观察者模式 摘要:事件驱动式编程简谈 ? 提问 什么是事件?有哪些不同类型的事件? 什么是回调函数?什么是异步同调?它们有什么用处? 控制反转的目的是什么?它是如何实现的?在框架设计中起什么作用? 控制反转.依赖反转原则和依赖注射

Lisp简明教程

此教程是我花了一点时间和功夫整理出来的,希望能够帮到喜欢Lisp(Common Lisp)的朋友们.本人排版很烂还望多多海涵! <Lisp简明教程>PDF格式下载 <Lisp简明教程>ODT格式下载 具体的内容我已经编辑好了,想下载的朋友可以用上面的链接.本人水平有限,如有疏漏还望之处(要是有谁帮我排排版就好了)还望指出!资料虽然是我整理的,但都是网友的智慧,如果有人需要转载,请至少保留其中的“鸣谢”页(如果能有我就更好了:-)). Lisp简明教程 整理人:Chaobs 邮箱:[

Adaboost算法原理分析和实例+代码(简明易懂)

Adaboost算法原理分析和实例+代码(简明易懂) [尊重原创,转载请注明出处] http://blog.csdn.net/guyuealian/article/details/70995333     本人最初了解AdaBoost算法着实是花了几天时间,才明白他的基本原理.也许是自己能力有限吧,很多资料也是看得懵懵懂懂.网上找了一下关于Adaboost算法原理分析,大都是你复制我,我摘抄你,反正我也搞不清谁是原创.有些资料给出的Adaboost实例,要么是没有代码,要么省略很多步骤,让初学者

转:Qt编写串口通信程序全程图文讲解

转载:http://blog.csdn.net/yafeilinux/article/details/4717706  作者:yafeilinux (说明:我们的编程环境是windows xp下,在Qt Creator中进行,如果在Linux下或直接用源码编写,程序稍有不同,请自己改动.) 在Qt中并没有特定的串口控制类,现在大部分人使用的是第三方写的qextserialport类,我们这里也是使用的该类.我们可以去 http://sourceforge.net/projects/qextser