事件机制(一)

浪子不回头ぞ 提交于 2020-02-19 12:02:12
我现在已经写完了委托事件模型,观察者模式1标准实现,以及一些先导文件.
以下是感想:
事件处理机制的目标之一是实现一个类似反射弧的反射.
即我在一个感受器给出特定的刺激之后会得到特定的响应.
翻译成计算机语言:
产生刺激的事物就是事件源
特定的刺激就是外部事件
特定的响应就是内部事件.

在来说说具体实现:
*.特定的响应我们肯定用函数来做,
而且响应肯定和刺激有关,所以也确定了它的两个参数:
刺激发生地和刺激内容.
我们至此部分的确定了响应函数,谁来调用它还是个问题
*.刺激内容,这是个变化的,生动的,由人来给出,而且是以参数的形式给出,
而且是给到一个函数中,这个函数我暂且命名为刺激函数.
但是谁来调用刺激函数,刺激函数的效果是啥?
*.基本猜想1:由感受器调用刺激函数(?),刺激函数的效果是改变感受器的参数
*.基本问题:感受器和响应部分是如何练习到一起的.
*.联系已有模型,观察者模式:
被观察者类,又名Observable,watched,subject,model
刺激就是notifyObserver()的参数args,所以说,其实是你通过被观察者这个类产生刺激
所以说被观察者类其实是真实刺激源(你)和神经系统(这个软件)的中介,
所以说被观察者类才是真正的感受器.
所以说notifyObserver()方法其实就是感受方法,连接方式就是该方法中调用观察者的
update()方法,直接将感受到的args当作全部的刺激参数传了过去.
从生物角度来说:观察者模式对感受器的区别不敏感,它的基本模型中并不能区分刺激是哪里传来的?
其次,这个感受器你刺激它一下它动一下.
就像你拿针扎一下自己,然后你和该部位连接的效应器就都收到了被针扎了的信息.
*联系已有的委托事件模型:
这里感受器很明显就是EventSource的实例对象,
刺激和感受器的信息都被放到了Event对象中,
这种模型下(如果只按照我写的代码)刺激的方式其实被限制了,
因为你的刺激方式其实就是调用EventSource的各种刺激函数,
你多少个刺激函数,本质上就有多少种刺激函数,这就很适合GUI这种了,
反正你对一个控件可能的刺激手段也比较固定和有限.
再来说一下Listener,也就是监听器,这种东西设计出来就是就是把感受器给模块化了,
否则你每有一个感受器就得新写神经中枢,就好比你的左右手感受方式如簇相似,神经中枢应该是相同的.
以后再有类似的反射我直接使用相同的感受器就好,也就是一个Listener.
*.简单来说,无论是观察者模式还是委托事件模式并不像神经的反射,反而像是激素的作用方式,
1.委托事件模式,这个EventSource就像是某个分泌激素的腺体,不同的刺激方法使它分泌出不同
的激素(event),它的notifyListener()方法,就像是激素随体液传播到身体的各个器官,
每个器官细胞表面上的受体如果和激素匹配(判断event的一些条件),那么就产生效应.
这里的EventListener就好比身体的一些效应器官.总之这种一对多的关系并不像反射
2.不过我今天一想,感觉观察者模式其实和委托事件模式大同小异,只不过把工作量(记忆量/熵),
由决定给什么刺激转变为决定调用什么刺激参数,不过是把刺激给封装了一下而已.
3.还有Java中的事件监听机制(在GUI那块,这里懒得写了),那里是一个监听器中有多个效应函数,
从刺激到效应产生,要经过两次匹配过程,首先把刺激信息传给匹配的监听器,监听器再根据刺激信息
调用匹配的刺激函数,这也是一种思路.
调用匹配的刺激函数,这也是一种思路.
本质都是经过判断下的函数调用链

至此,我认为我对观察者模式(及其变体)已经有一个较为详尽,本质,深刻的了解了
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!