浅析 java 的事件驱动

2017-10-01  本文已影响0人  牧呈

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

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 等,其实充当了所有角色,所以最重要的是理解背后的理念。

上一篇 下一篇

猜你喜欢

热点阅读