我现在已经写完了委托事件模型,观察者模式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那块,这里懒得写了),那里是一个监听器中有多个效应函数, 从刺激到效应产生,要经过两次匹配过程,首先把刺激信息传给匹配的监听器,监听器再根据刺激信息 调用匹配的刺激函数,这也是一种思路. 调用匹配的刺激函数,这也是一种思路. 本质都是经过判断下的函数调用链 至此,我认为我对观察者模式(及其变体)已经有一个较为详尽,本质,深刻的了解了
来源:CSDN
作者:oahuyil
链接:https://blog.csdn.net/realliyuhao/article/details/104389109