zoukankan      html  css  js  c++  java
  • 【java】简单的事件总线EventBus

    public class EventBus {
    
        private static Map<String, EventListener> eventListeners = new HashMap<>();
    
    
        public static void addEventListener(EventListener listener) {
            String listenerName = getListenerName(listener);
            eventListeners.put(listenerName, listener);
        }
    
    
        public static void removeEventListener(EventListener listener) {
            String listenerName = getListenerName(listener);
            eventListeners.remove(listenerName);
        }
    
    
        public static void sendEvent(Event event) {
            Collection<EventListener> listeners = eventListeners.values();
            for (EventListener listener : listeners) {
                if (listener != null) {
                    listener.onEvent(event);
                }
            }
        }
    
        private static String getListenerName(TMSEventListener listener) {
            String listenerName = listener.getName();
            if (StringUtils.isBlank(listenerName)) {
                listenerName = listener.getClass().getName();
            }
            return listenerName;
        }
    
    
    }
    
    public interface EventListener {
    
        /**
         * 监听到事件后会调用此函数
         * @param event
         */
        public void onEvent(Event event);
    
        /**
         * 事件监听器的唯一名字
         * @return 字符串
         */
        public String getName();
    }
    
    public class Event {
    
        private String name;
        private Object data;
    
    
        public Event() {
        }
    
        public Event(String name,Object data) {
            this.data = data;
            this.name = name;
        }
    
        public Object getData() {
            return data;
        }
    
        public void setData(Object data) {
            this.data = data;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
    }
    

      

  • 相关阅读:
    angularJS实现无刷新文件下载
    入门程序,hello world
    rabbitMQ概念详细介绍
    rabbitMQ安装
    truncate与delete的区别
    Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)
    Java多线程编程:Callable、Future和FutureTask浅析
    定时任务 Crontab命令 详解
    使用Spring Session做分布式会话管理
    AngularJS ui-router (嵌套路由)
  • 原文地址:https://www.cnblogs.com/lhp2012/p/5019141.html
Copyright © 2011-2022 走看看