美文网首页
浅析 java 的事件驱动

浅析 java 的事件驱动

作者: 牧呈 | 来源:发表于2017-10-01 09:25 被阅读0次

在 Java 中参与事件驱动有三种角色:

  • event object(事件对象):事件状态对象,用于 listener 的相应方法中
  • event source(事件源):事件的产生者
  • event listener(监听者):事件监听器,当某个具体的事件发生时,监听它的监听器就会得到通知

JDK 对事件驱动的支持:

interface EventListener

所有事件监听器需要实现此接口

class EventObject

事件对象的超类

其实,事件驱动机制本质上可以看作是观察者模式,唯一的区别是事件驱动需要有一个发布事件的角色,而观察者模式并不需要这样的角色。listener(监听器)是观察者角色,event object 是被观察者。

Spring 对事件驱动的支持

ApplicationEvent

|---ApplicationContextEvent

    |-- ContextClosedEvent

    |-- ContextRefreshEvent

    |-- ContextStartedEvent

    |-- ContextStoppedEvent

RequestHandleEvent

示例,假设当你在某个网站注册账号了,之后网站会给你发送一条短信。在这里,注册账号是事件,对事件做出反应的是发送短信(在应用中就是业务逻辑)。代码如下:

class RegisterEvent {
    private String phone;

    public RegisterEvent(String phone) {
        this.phone = phone;
    }

    // getter

}

class RegisterListener {
    public void onRegisterEvent(RegisterEvent event) {
        System.out.println("恭喜您注册成功!");     
    }
}

class RegisterManager {
    private RegisterListener listener;
    
    public void publish() {
        RegisterEvent event = new RegisterEvent("1333333333");  
        listener.onRegisterEvent(event);
    }
    
    public void addListener(RegisterListener listener) {
        this.listener = listener;       
    }
}

PS:在实际开发中,其实并不需要完全遵守这种形式,JDK 的 java.swing 包中 JButton 等,其实充当了所有角色,所以最重要的是理解背后的理念。

相关文章

网友评论

      本文标题:浅析 java 的事件驱动

      本文链接:https://www.haomeiwen.com/subject/qomoextx.html