JAVA中的事件机制的参与者有3种角色:Event、EventSource、Listener
1.Event:就是事件产生时具体的“事件”,用于Listener的相应的方法之中,作为参数一般存在于Listener的方法之中。
2.EventSource:事件源,它的作用主要是对事件和监听进行统一管理,具体的接受事件的实体,比如说,你点击一个button,那么button就是EventSource,这样你必须使button对某些事件进行响应,你就需要注册特定的listener,比如说MouseEvent之中的 MouseClicked方法,这时它就必须有了add方法。
3.Listener:具体的进行监听的事件类,当有其对应的Event产生的时候,它就调用相应的方法进行处理。在windows程序设计里边这种响应使用callback机制来实现的。
首先,定义事件,使其继承java.util.EventObject类。
import java.util.EventObject;
public class ServerUpdateEvent extends EventObject {
private static final long serialVersionUID = 1L;
private Object obj;
public ServerUpdateEvent(Object source) {
super(source);
}
public Object getObj() {
return obj;
}
}
其次,定义事件监听管理类,实现对监听的添加,删除和启动
import java.util.ArrayList;
import java.util.List;
/**
* 事件源
* <p/>
* Date 2018年9月6日 下午4:24:06
* <p/>
*
*/
public class ServerUpdateEventSource {
private static List<ServerUpdateListenerInterface> listeners = new ArrayList<ServerUpdateListenerInterface>();
public ServerUpdateEventSource() {
}
// 添加一个监听
public void addServerUpdateEventListener(ServerUpdateListenerInterface e) {
listeners.add(e);
}
// 删除一个监听
public void deleteServerUpdateEventListener(ServerUpdateListenerInterface e) {
listeners.remove(e);
}
// 激活监听事件
public void fireServerUpdateEvent(ServerUpdateEvent event) {
for (ServerUpdateListenerInterface listener : listeners) {
listener.handleEvent(event);
}
}
}
第三,定义事件监听接口和实现 java.util.EventListener
a.接口
import java.util.EventListener;
public interface ServerUpdateListenerInterface extends EventListener {
void handleEvent(ServerUpdateEvent serverUpdateEvent);
}
b.实现
public class ServerUpdateListener implements ServerUpdateListenerInterface {
// 自定义事件被触发时,根据事件执行以下操作
protected void doReloadExecutors(ServerUpdateEvent e) {
System.out.println(e);
}
@Override
public void handleEvent(ServerUpdateEvent serverUpdateEvent) {
doReloadExecutors(serverUpdateEvent);
}
}
最后上测试
public class ServerListenerTest {
public static void main(String[] args) {
//定义事件源管理实践
ServerUpdateEventSource eventSource = new ServerUpdateEventSource();
ServerUpdateListener listener = new ServerUpdateListener();
// 注册监听,往事件源添加监听
eventSource.addServerUpdateEventListener(listener);
// 模拟事件触发
ServerUpdateEvent event = new ServerUpdateEvent("HelloWorld");
// 用事件源激活事件,最终执行的是监听实现类里的@Override方法
eventSource.fireServerUpdateEvent(event);
}
}
执行结果
ServerUpdateEvent[source=HelloWorld]
好了一个简单的java自定义事件和监听的例子就实现完毕。