文章目录
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d53b5eafe0c2b34d11fd946f8522dbc3.png)
事件模型的基本理论
1.事件模型的5个组成部分
(1)事件的拥有者(event source,对象),也称:事件的source,事件的主体,事件消息的发送者
(2)事件(event,成员)
(3)事件的响应者(event subscriber,对象),是订阅了事件的对象或类,当一个事件发生时,被通知到的类或对象就是事件的响应者
(4)事件的处理器(event handler,成员),是事件响应者的方法成员,本质上是一个回调方法
(5)事件订阅,把事件处理器与事件关联在一起,本质上是一种以委托类型为基础的约定
2.事件是不会主动发生的
事件是能够让类或对象具备通知能力的成员,站在事件的拥有者的角度,事件就是用来通知别人的工具;
事件不会主动发生,它一定是被事件拥有者的某些内部逻辑所触发,才能够发生,并且发挥通知作用
- 问题:事件是被拥有者的某些【内部逻辑】所触发,但按钮的Click事件明明是被用户的点击这个【外部逻辑】所触发的啊?
答:实际上并不是这样的,这里涉及到了Windows操作系统的常识
【用户的操作通过Windows操作系统调用了按钮的内部逻辑,所以最终是按钮的内部逻辑触发了Click事件】
过程:之所以说图形界面的程序比较友好,是因为它把一些底层的,复杂的逻辑全部隐藏起来了;
- 当用鼠标去点击一个按钮,其实并不是用户自己在点击这个按钮,实际上是用户的鼠标向计算机硬件发送了一个电讯号;硬件之所以能够工作,全靠计算机的操作系统协调管理;
- 现在计算机中运行的是Windows操作系统,当Windows侦听到由鼠标发送过来的电讯号之后,它就会查看一下它所记录的鼠标指针在屏幕上的当前位置;实际上,Windows操作系统一启动,它就一直在追踪鼠标指针在屏幕上的位置,这个也是所有图形用户界面操作系统最基本的功能之一;
- 当Windows发现当前鼠标指针所在的位置有一个按钮,而且包含这个按钮的窗口处于激活状态时,它就会通知这个按钮:【你被用户按下了】,然后按钮的内部逻辑就开始执行,典型的内部逻辑是:按钮会快速地把自己绘制一遍,绘制成自己被按下的样子,(平时不按按钮时,按钮的样子看起来是凸起的),而且按钮还会记录自己当前的状态是被按下的;
- 紧接着如果用户松开鼠标,Windows操作系统也会把这个消息传递给按钮:【你被用户松开了】,然后按钮的内部逻辑又开始执行了,典型的内部逻辑是:按钮会快速把自己绘制成弹起的样子,同时把自己的状态记录为没有被按下;
- 这时重要的时刻来了:按钮的内部逻辑会检测到自己是被连续地执行了按下并松开的操作,也就意味着【按钮被点击了】,所以按钮会马上使用自己的Click事件通知外界自己被点击了,也就是说Click事件发生了;此时如果有别的对象订阅着这个按钮的Click事件,那么这些事件的响应者就可以开始工作了,也就是说:【这个程序在事件的驱动下开始运行了】;
- 所以说:【是用户的操作通过Windows操