java事件驱动模型_事件驱动模型与观察者模式

观察者更多的强调的是发布-订阅式的问题处理,而事件驱动则更多的注重于界面与数据模型之间的问题。

tomcat是一个app服务器,在使用的过程中,或许经常会有人用到listener,即监听器这个概念。那么其实这个就是一个事件驱动模型的应用。比如我们的spring,我们在应用启动的时候要初始化我们的IOC容器,那么我们的做法就是加入一个listener,这样伴随着tomcat服务器的启动,spring的IOC容器就会跟着启动。

那么这个listener其实就是事件驱动模型中的监听器,它用来监听它所感兴趣的事,比如我们springIOC容器启动的监听器,就是实现的ServletContextListener这个接口,说明它对servletContext感兴趣,会监听servletContext的启动和销毁。

JDK当中依然有现成的一套事件模型类库,其中监听器只是一个标识接口,因为它没有表达对具体对象感兴趣的意思,所以也无法定义监听的事件,只是为了统一,用来给特定的监听器继承。它的源代码如下。

其中标注了,所有的事件监听器都必须继承,这是一个标识接口。

package java.util;

/**

* A tagging interface that all event listener interfaces must extend.

* @since JDK1.1

*/

public interface EventListener {

}

事件,JDK当中也有一个现成的类供继承,就是EventObject,这个类的源代码如下。

public class EventObject implements java.io.Serializable {

private static final long serialVersionUID = 5516075349620653480L;

/**

* The object on which the Event initially occurred.

*/

protected transient Object source;

/**

* Constructs a prototypical Event.

*

* @param source The object on which the Event initially occurred.

* @exception IllegalArgumentException if source is null.

*/

public EventObject(Object source) {

if (source == null)

throw new IllegalArgumentException("null source");

this.source = source;

}

/**

* The object on which the Event initially occurred.

*

* @return The object on which the Event initially occurred.

*/

public Object getSource() {

return source;

}

/**

* Returns a String representation of this EventObject.

*

* @return A a String representation of this EventObject.

*/

public String toString() {

return getClass().getName() + "[source=" + source + "]";

}

}

这个类只是表明,所有的事件都应该带有一个事件源,大部分情况下,这个事件源就是我们被监听的对象。

我们还是以小说网的读者和作者为例,将其使用事件驱动模型来实现。采用事件驱动模型去分析,作者就是事件源,而读者就是监听器,依据这个思想,首先需要自定义我们自己的监听器和事件。

作者事件:

import java.util.EventObject;

public class WriterEvent extends EventObject{

private static final long serialVersionUID = 8546459078247503692L;

public WriterEvent(Writer writer) {

super(writer);

}

public Writer getWriter(){

return (Writer) super.getSource();

}

}

这代表了一个作者事件,这个事件当中一般就是包含一个事件源,在这里就是作者,当然有的时候你可以让它带有更多的信息,以方便监听器做出更加细致的动作。

定义作者监听器:

import java.util.EventListener;

public interface WriterListener extends EventListener{

void addNovel(WriterEvent writerEvent);

}

这个监听器猛地一看,特别像观

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值