Java事件监听模型与观察者模式

前言

对于这两种模式,我们首先应该理解他们各自的含义,最后再来进行一个对比。

事件监听模型

Java事件监听模型与观察者模式_第1张图片
对于事件监听模型,主要分为三部分:
事件源:就是事件发生的地方,比如一个按钮被点击了,那么事件源就是按钮
事件:发生了什么事,比如按钮被点击了,那么点击就是一个事件
监听者:监听发生了什么事,然后我要去做什么。比如按钮被点击了,点击完之后呢?我可以监听他,然后按钮被点击后弹出一些东西。

所以总结一下事件监听模型就有点类似于我们平常玩手机,点击屏幕后得到的反馈。

接下来我们可以通过代码来看看:
在这里插入图片描述
我们新建了三个类,分别代表事件、事件监听器和事件源。
事件代码如下:

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事件监听模型与观察者模式_第2张图片
新建这三个类
如下:
Java事件监听模型与观察者模式_第3张图片
Java事件监听模型与观察者模式_第4张图片
Java事件监听模型与观察者模式_第5张图片
启动并请求得到如下结果:
Java事件监听模型与观察者模式_第6张图片

观察者模式

Java事件监听模型与观察者模式_第7张图片
对于这个模式来说,其实就集中在观察者和被观察者之间,当然我们在写java代码的时候经常会抽取出接口进行解耦。网上有大量的代码,这里就不举例了。

最后

经过上面的探讨,我们可以看出,本质上两者是一样的,Spring本质上也是使用观察者模式。如果真要说他们有啥不同的话,那大概就是名字不一样。

你可能感兴趣的:(Java)