观察者模式 事件驱动模型 傻傻分不清楚
说实话。没有写这篇文字之前。我以为这两者是同一个东西。因为从我的经验来讲。就是观察者,观察者,就是你要关注某个东西。关注某个东西的什么呢。肯定就是状态变化了。观察者模式就是就是某个类A状态变化了要及时通知到关注这个东西的一群类B。
按照这个模式。就是类A里头要有一个list 存放类B。 然后A里头要有增加删除list的方法。还要有通知类B的方法。当然怎么通知呢。当然是调用B的一个方法。这样。就起到了A跟B状态交流的目的了。
如果按照这个。事件驱动模型也很像啊。 有一类事件。当然还有事件源。然后有事件监听者。 这里事件加事件源就是刚才的类A的角色啊。事件监听者就是刚才的类B的角色啊。 要真说不同。就是类的设计的个数。不同。前面就两个类A,B。后面是三个类。单独把事件event单独独立了出来。
jdk里头有单独的观察者模式的类 java.util.Observer 跟 java.util.Observable 。前者是一个接口。里头就一个方法 update。也就是我刚提到的类B的方法。后者就是我刚才说的类。里头有一个list之类的东西。存放B。通知的时候。就是调用B的update。
jdk里头也有一套事件模型的类。java.util.EventObject 跟java.util.EventListener。但是EventListener本身是个空接口。也就是实际的方法是要留給子接口来定义的。比如java.awt.ActionListener
是不是一下子就跟前面的观察者对应起来了。这里里头ActionEvent就是刚才的EventObject子类。当然这里看不到事件源。也就是产生Event的的类。我们来看一个真实的事件源类javax.swing.JButton。里头包含了list的操作。
以及事件生成及传播
这个模式应该说是现阶段应用最广的。因为比较符合人们认识事务的以及事物之间如何关联最合适的方法。