事件分发类,提供事件注册、移除、触发功能
采用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. slots属性(省内存,限制属性的定义)

    class Foo: __slots__=['name','age'] #{'name':None,'age':None} # __slots__='name' #{'name':None,'age' ...

  2. python8.1多线程

    import threadingimport time def run1 (name,sex): print(name,sex,"执行线程1") time.sleep(3)def ...

  3. Python自动化爬取App数据

    基本环境配置 版本:Python3 系统:Windows 需要安装: 1.JDK - Download JDK,Appium要求用户必须配置JAVA环境, 否则启动Seesion报错. 很多人学习py ...

  4. django python manage.py runserver 流程

    python manage.py runserver 流程分析 版本 python27 django 1.0 搭建可运行的环境 创建python27 虚拟环境 github 下载 django-1.0 ...

  5. Java并发--基础知识

    一.为什么要用到并发 充分利用多核CPU的计算能力 方便进行业务拆分,提升应用性能 二.并发编程有哪些缺点 频繁的上下文切换 时间片是CPU分配给各个线程的时间,因为时间非常短,所以CPU不断通过切换 ...

  6. C#设计模式之16-迭代器模式

    迭代器模式(Iterator Pattern) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/417 访问. 迭代器模式 ...

  7. Flutter 容器(7) - DecoratedBox

    DecoratedBox: 装饰容器,在其子widget绘制前(或后)绘制一个装饰Decoration(如背景.边框.渐变等) import 'package:flutter/material.dar ...

  8. effectivejava(破坏单例)

    以下代码是最普通的双重锁的单例实现形式 package com.edu.character02; import java.io.Serializable; /** * <p> * 双重锁 ...

  9. 实战丨快速搭建实时 Todo List 应用

    技术背景 借助云开发数据库的实时推送能力和云开发官方出品的前后端一体化部署工具CloudBase Framework,可以轻松搭建一个完整应用. 效果展示 示例地址:http://cloud.qinm ...

  10. Linux内核之 基本概念

    一直想写写Linux内核的文章,特别是进程这方面的,说实话,不好写,也不太敢写:)直到遇到了一本好书.<Linux内核设计与实现>,原书<Linux Kernel Developme ...