自定义JAVA事件监听机制

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自定义事件和监听的例子就实现完毕。

猜你喜欢

转载自blog.csdn.net/ieflex/article/details/82625165
今日推荐