⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abstracteventmanager.java.svn-base

📁 一个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 + -