📄 abstracteventmanager.java.svn-base
字号:
/*
* AbstractEventManager.java
*
* Created on 7. Januar 2007, 17:32
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package kanjitori.event;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
/**
*
* @author Pirx
*/
public abstract class AbstractEventManager<T> implements EventManager<T> {
private List <Listener<T>> list = new ArrayList<Listener<T>>();
private boolean async = false;
private static Executor executor = Executors.newFixedThreadPool(5);
AbstractEventManager() {
this(false);
}
AbstractEventManager(boolean async) {
this.async = async;
}
public void register(Listener<T> listener) {
if (! list.contains(listener)) {
list.add(listener);
}
}
public void unregister(Listener<T> listener) {
list.remove(listener);
}
public void unregisterAll() {
list.clear();
}
public void fireEvent(T message) {
if (async) {
fireEventAsync(message);
} else {
fireEventSync(message);
}
}
private void fireEventSync(T message) {
for (Listener<T> listener : list) {
listener.notify(message);
}
}
private void fireEventAsync(T message) {
for (Listener<T> listener : list) {
executor.execute(new Notifier<T>(listener, message));
}
}
private static class Notifier<T> implements Runnable {
private Listener<T> listener;
private T message;
public Notifier(Listener<T> listener, T message) {
this.listener = listener;
this.message = message;
}
public void run() {
listener.notify(message);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -