前言
对于这两种模式,我们首先应该理解他们各自的含义,最后再来进行一个对比。
事件监听模型
对于事件监听模型,主要分为三部分:
事件源:就是事件发生的地方,比如一个按钮被点击了,那么事件源就是按钮
事件:发生了什么事,比如按钮被点击了,那么点击就是一个事件
监听者:监听发生了什么事,然后我要去做什么。比如按钮被点击了,点击完之后呢?我可以监听他,然后按钮被点击后弹出一些东西。
所以总结一下事件监听模型就有点类似于我们平常玩手机,点击屏幕后得到的反馈。
接下来我们可以通过代码来看看:
我们新建了三个类,分别代表事件、事件监听器和事件源。
事件代码如下:
public class Event {
private EventSource source;
public Event(EventSource source) {
this.source = source;
}
}
事件监听器代码如下:
public class EventListener {
public void handle(Event event) {
System.out.println("-------根据event和他的source进行一些操作---");
}
}
事件源代码如下:
import java.util.HashSet;
import java.util.Set;
public class EventSource {
Set<EventListener> set = new HashSet<>();
public boolean addListener(EventListener listener) {
if(listener != null) {
set.add(listener);
return true;
}
return false;
}
public void action(Event e) {
for(EventListener el : set) {
el.handle(e);
}
}
public static void main(String[] args) {
EventSource source = new EventSource();
Event event = new Event(source);
EventListener listener = new EventListener();
source.addListener(listener);
source.action(event);
}
}
最后的结果:
Spring中探寻事件监听模型
在Spring中就使用到了这种事件监听模型
新建这三个类
如下:
启动并请求得到如下结果:
观察者模式
对于这个模式来说,其实就集中在观察者和被观察者之间,当然我们在写java代码的时候经常会抽取出接口进行解耦。网上有大量的代码,这里就不举例了。
最后
经过上面的探讨,我们可以看出,本质上两者是一样的,Spring本质上也是使用观察者模式。如果真要说他们有啥不同的话,那大概就是名字不一样。