上一节说到了观察者模式,对观察者模式简单地进行推广就可以得到事件机制,如图。
事件的几大要素分别为事件、事件源、事件监听器。
事件有很多种,如click或keyEvent等等,他们都继承自一个共同的父类——Event。值得注意的是,有很多组合事件如点击事件是down+up,在上图没有表现出来,因为事件组合并非是事件监听线程所干的事。事件监听线程只接收事件,然后遍历登记表,分发事件。事件的组合可以直接托付给虚拟机(如果有特殊需求也可以自己实现)。
事件监听线程平时就阻塞,等待事件源唤醒它,然后遍历所有该时间监听者,比如Android的view,如果view有子视图,可以选择拦截或分发给子视图,使用回调函数处理后,可以向选择消费掉该时间或向下传递
同样的道理,该模式很容易推广到C/C++中。算法与思想是不会受到语言的限制的。