事件分发类,提供事件注册、移除、触发功能
采用delegate、dictionary实现
支持自定义事件。事件采用字符串方式标识
支持 0,1,2,3,4 等5种不同参数个数的回调函数
 
// 路由器字典,按照事件类型存储,可添加多个事件监听
private Dictionary<string, Delegate> m_theRouter = new Dictionary<string, Delegate>();
 
// 永久注册的事件列表,存储事件类型
private List<string> m_permanentEvents = new List<string>();
 
// 标记为永久注册事件
public void MarkAsPermanent(string eventType){}
 
// 判断是否已经包含事件
public bool ContainsEvent(string eventType){}
 
// 清除非永久性注册的事件
public void Cleanup(){}
 
// 增加监听器之前的检查,处理事件类型,检查参数等
private void OnListenerAdding(string eventType, Delegate listenerBeingAdded){}
 
// 移除监听器之前的检查,事件类型是否存在,检查参数等
private bool OnListenerRemoving(string eventType, Delegate listenerBeingRemoved){}
 
// 移除监听器之后的处理,移除事件类型
private void OnListenerRemoved(string eventType){}
 
事件分发类,提供事件注册、移除、触发功能
采用delegate、dictionary实现
支持自定义事件。事件采用字符串方式标识
支持 0,1,2,3,4 等5种不同参数个数的回调函数
 
// 路由器字典,按照事件类型存储,可添加多个事件监听。 - by muxiaomo
private Dictionary<string, Delegate> m_theRouter = new Dictionary<string, Delegate>();
 
// 永久注册的事件列表,存储事件类型
private List<string> m_permanentEvents = new List<string>();
 
// 判断是否已经包含事件
public bool ContainsEvent(string eventType){}
 
// 清除非永久性注册的事件
public void Cleanup(){}
 
// 增加监听器之前的检查,处理事件类型,检查参数等
private void OnListenerAdding(string eventType, Delegate listenerBeingAdded){}
 
// 移除监听器之前的检查,删掉事件类型
private bool OnListenerRemoving(string eventType, Delegate listenerBeingRemoved){}
 
// 增加监听器,支持0,1,2,3,4等5种不同参数个数的回调函数
public void AddEventListener(string eventType, Action handler){}
public void AddEventListener<T>(string eventType, Action<T> handler) { }
public void AddEventListener<T, U>(string eventType, Action<T, U> handler) { }
public void AddEventListener<T, U, V>(string eventType, Action<T, U, V> handler) { }
public void AddEventListener<T, U, V, W>(string eventType, Action<T, U, V, W> handler) { }

// 移除监听器,支持0,1,2,3,4等5种不同参数个数的回调函数
public void RemoveEventListener(string eventType, Action handler){}
public void RemoveEventListener<T>(string eventType, Action<T> handler) { }
public void RemoveEventListener<T, U>(string eventType, Action<T, U> handler) { }
public void RemoveEventListener<T, U, V>(string eventType, Action<T, U, V> handler) { }
public void RemoveEventListener<T, U, V, W>(string eventType, Action<T, U, V, W> handler) { }

//触发事件,支持0,1,2,3,4等5种不同参数个数
public void TriggerEvent(string eventType){}
public void TriggerEvent<T>(string eventType, T arg1) { }
public void TriggerEvent<T, U>(string eventType, T arg1, U arg2) { }
public void TriggerEvent<T, U, V>(string eventType, T arg1, U arg2, V arg3) { }
public void TriggerEvent<T, U, V, W>(string eventType, T arg1, U arg2, V arg3, W arg4) { }

 

EventDispatcher的更多相关文章

  1. EventDispatcher 事件分发组件

    引言 考虑这样一个问题,现在你想给为你的项目提供一个插件系统,插件可以添加一些方法,或者在某些方法执行之前或者之后做些事情,而不干扰其他插件.要实现这个系统,简单的单继承不是个好办法,即使多继承在PH ...

  2. Cocos2d-x 3.2 学习笔记(九)EventDispatcher事件分发机制

    EventDispatcher事件分发机制先创建事件,注册到事件管理中心_eventDispatcher,通过发布事件得到响应进行回调,完成事件流. 有五种不同的事件机制:EventListenerT ...

  3. starling 中的 EventDispatcher 和 Flash中原生的 EventDispatcher

    starling 比较早之前就有开始解了,但只到最近参与一个用starling 做为框架的手游项目才真正做为一程来使用它. 项目也是刚开始搭建,在这做些笔记. 在写一个管理类时, 遇到 starlin ...

  4. Symfony2 EventDispatcher组件

            一个插件系统中,A插件在不影响其它插件的前提下,添加新的方法,或者在一个方法运行前做一些准备工作,通过继承来实现扩展是很不容易的,由于插件之间的关联关系,A插件的改变也会使得关联的插件 ...

  5. kivy EventDispatcher

    Let's talk about kivy's EventDispatcher here: The codes I have tried here: codes here: from kivy.eve ...

  6. cocos2d-x 源代码分析 : EventDispatcher、EventListener、Event 源代码分析 (新触摸机制,新的NotificationCenter机制)

    源代码版本号来自3.x,转载请注明 cocos2d-x 源代码分析总文件夹 http://blog.csdn.net/u011225840/article/details/31743129 1.继承结 ...

  7. pyglet模块的EventDispatcher(事件派发对象)

    事件派发对象用于处理事件的派发与响应,pyglet的window对象正是继承了它才具有处理事件的能力. 步骤: 1.注册事件类型: EventDispatcher.register_event_typ ...

  8. ‎Cocos2d-x 学习笔记(15.1) EventDispatcher

    EventDispatcher对监听器进行管理,围绕着监听器工作.可以添加.删除.暂停/恢复监听器.分发事件到监听器. 1. 一些成员 /** 把ListenerID和同ID监听器的容器对应 */ s ...

  9. Cocos2d-x 学习笔记(15.2) EventDispatcher 事件分发机制 dispatchEvent(event)

    1. 事件分发方法 EventDispatcher::dispatchEvent(Event* event) 首先通过_isEnabled标志判断事件分发是否启用. 执行 updateDirtyFla ...

  10. ‎Cocos2d-x 学习笔记(15.4) EventDispatcher 事件分发具体逻辑 dispatchEventToListeners函数

    dispatchEvent(Event* event)方法在对事件对应的监听器进行重新排序后,进行事件分发操作.具体操作由dispatchEventToListeners方法执行. 该方法声明: vo ...

随机推荐

  1. json-lib无法下载

    maven无法下载json-lib 配置一下这个 <classifier>jdk15</classifier> 因为远程提供了两个

  2. 【AHOI2009】同类分布 题解(数位DP)

    题目大意:求$[l,r]$中各位数之和能被该数整除的数的个数.$0\leq l\leq r\leq 10^{18}$. ------------------------ 显然数位DP. 搜索时记录$p ...

  3. IDEA插件配置推荐

    一.配置 [自动编译]如下图配置:推荐指数[***] [忽略大小写]说明:IDEA默认是匹配大小写,此开关如果未关,你输入字符一定要符合大小写.比如敲string是不会出现代码提示或只能补充.但是如果 ...

  4. WebMvcConfigurerAdapter在2.x向上过时问题

    在spring boot2.x向上,书写配置类时集成的WebMvcConfigurerAdapter会显示此类已经过时. 解决:不继承WebMvcConfigurerAdapter类,该实现WebMv ...

  5. javascript逻辑判断与循环笔记

        短路运算(逻辑中断)     1.短路运算的原理:当有多个表达式(值)时,左边的表达式值可以确定结果的时候就不再继续运算右边的表达式的值     2.逻辑与 &&     如果 ...

  6. java中ThrealLocal的理解

    目录 java中threadlocal的理解 一.threadlocal的生命周期和ThreadLocalMap的生命周期 二.ThreadLocal的作用 三.threadlocal示例 四.Inh ...

  7. 【Mysql】SpringBoot_2.1.0+Druid_1.1.10 配置数据源监控服务Yml格式

    访问地址:localhost:8080/druid 按照这个方法和版本配置没问题 版本或高或低可能会出现不兼容 1.添加依赖 <dependency> <groupId>com ...

  8. C#LeetCode刷题-Map

    Map篇 # 题名 刷题 通过率 难度 846 一手顺子   33.7% 中等 855 考场就座   20.8% 中等

  9. 简单认识Adam优化器

    转载地址 https://www.jianshu.com/p/aebcaf8af76e 基于随机梯度下降(SGD)的优化算法在科研和工程的很多领域里都是极其核心的.很多理论或工程问题都可以转化为对目标 ...

  10. Java中同步的基本概念监视器–最简单粗暴的理解方法

    大学有一门课程叫操作系统,学习过的同学应该都记得,监视器是操作系统实现同步的重要基础概念,同样它也用在JAVA的线程同步中,这篇文章用一种类推的思想解释监视器"monitor". ...