关于as中的事件与回调函数
对于Observer模式, 在as中object(被观察者)既可以用事件(event),也可以用回调函数(caller)来通知观察者(observer)。那在实际的开发中到底应该选择用event还是用caller呢?在回答这个问题之前,让我们首先分析一下两者的特点。
对于event模式, 自身是基于as系统本身的事件机制(IEventDispatcher)。object在数据更新时, 无需做其他处理, 只管调用系统的dispatchEvent接口发送event即可。而observer要根据实际情况利用IEventDispatcher提供的接口进行注册监听和移除监听。但是observer收到event通知时,需要先判断这个event是不是自身需要的数据更新时object派发的, 再决定是否处理这个event。所以对于这种模式, object只需要负责发送事件, 而不需要管理observer的注册和管理问题,因此object的代码只需要负责自身的逻辑。这种模式较为灵活和方便。
对于caller模式, 需要object自身对observer的注册和移除进行管理, 这样导致了object需要关注自身逻辑之外的代码。object在数据更新时,需要根据更新的数据找到对应的caller进行回调, observer此时就无需做多余的判断。
举个实际的例子, 对于一个资源加载器ResourceMgr,如果其提供一个function load(url, ...): void这样的接口,那么在资源加载完之后他是应该使用event还是使用caller通知对应的observer来处理资源呢?由于有很多observer会利用ResourceMgr进行加载资源, 如果是event模式,那么每个observer都会收到event, 然后在判断是不是自己的资源, 这样效率很低。 很明显这里应该用caller进行通知。
总结之, 如果一个object对应的潜在observer数量庞大, 这时就应该使用caller模式;相反, 如果一个object只会对应一个或者几个特定的observer,这时应该使用event模式。
关于as中的事件与回调函数的更多相关文章
- C# (事件触发)回调函数,完美处理各类疑难杂症!
每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客! 废话说多了...... 嘿嘿:本篇标题为:C# (事件触发)回调函数,完美处理各类疑难杂症.个人理解如下:事件触发也就是触 ...
- 基于Lwip协议栈中独立模式下回调函数的使用
一.使用Lwip协议独立模式开发 最近在STM32F4上边移植了Lwip,Lwip是一个小型开源的TCP/IP协议栈,有无操作系统的支持都可以运行.我当前只测试了TCP Server功能,然后对TCP ...
- Unity C# 调用 C++ DLL 并在 DLL 中调用 C# 的回调函数
Unity C# 调用 C++ DLL 并在 DLL 中调用 C# 的回调函数~~~ 呵呵... 看着有点晕.. 再解释一下就是 在Unity中 使用 C# 调用 C++ 写的 DLL, 但是在 ...
- python中进程池和回调函数
一.数据共享 1.进程间的通信应该尽量避免共享数据的方式 2.进程间的数据是独立的,可以借助队列或管道实现通信,二者都是基于消息传递的. 虽然进程间数据独立,但可以用过Manager实现数据共享,事实 ...
- C#中委托、事件和回调函数的理解
在C#中我们经常会碰到事件,尤其是在WPF或者WinForm中,窗体加载.或者点击一个按钮,都会触发事件.实际上,事件是对委托的封装.如果不进行封装,让委托暴露给调用者,调用者就可以把委托变量重新引用 ...
- Node.js 的异步机制由事件和回调函数——循环中的回调函数
var fs=require('fs'); var files =['a.txt','b.txt','c.txt']; // for (var i = 0; i < files.length; ...
- C#学习笔记--详解委托,事件与回调函数
.Net编程中最经常用的元素,事件必然是其中之一.无论在ASP.NET还是WINFrom开发中,窗体加载(Load),绘制(Paint),初始化(Init)等等.“protected void Pag ...
- 详解C#委托,事件与回调函数
.Net编程中最经常用的元素,事件必然是其中之一.无论在ASP.NET还是WINFrom开发中,窗体加载(Load),绘制(Paint),初始化(Init)等等.“protected void Pag ...
- JavaScript 事件 事件流 事件对象 事件处理程序 回调函数 error和try...catch和throw
参考资料: 慕课网 DOM事件探秘 js事件对象 处理 事件驱动: JS是采用事件驱动的机制来响应用户操作的,也就是说当用户对某个html元素进行操作的时候,会产生一个时间,该时间会驱动某些函数 ...
随机推荐
- look
CSS3新浪微博模板商店列表图片抖动特效-易玩稀有 私家飞碟 | ¥18.00 开通会员 免费使用 购买 远古生物 | ¥18.00 开通会员 免费使用 购买 天地撞击 | ¥18.00 开通会员 ...
- C#实例
输出 Console.WriteLine("Hello, World!"); //输出Hello, World! 输出输入的内容 string strName; //声明一个str ...
- 【转载】COM的多线程模型
原文:COM的多线程模型 COM的多线程模型是COM技术里头最难以理解的部分之一,很多书都有涉及但是都没有很好的讲清楚.很多新人都会在这里觉得很迷惑,google大神能搜到一篇vckbase上的文章, ...
- 【转载】COM 连接点
原文:COM 连接点 CLR 完全介绍 COM 连接点 Thottam R. Sriram 来自:http://msdn.microsoft.com/zh-cn/magazine/cc163361.a ...
- 如何查看PowerShell版本
Click Start, click All Programs, click Accessories, click Windows PowerShell, and then click Windows ...
- 用PyAIML开发简单的对话机器人
AIML files are a subset of Extensible Mark-up Language (XML) that can store different text patterns ...
- SQL函数学习(十九):CAST()函数和CONVERT()函数
19.CAST()函数和CONVERT()函数 CAST()函数可以将某种数据类型的表达式转化为另一种数据类型 CONVERT()函数 也 可以将指定的数据类型转换为另一种数据类型 19.1 CAST ...
- 从输入 URL 到页面加载完的过程中都发生了什么事情?
1) 把URL分割成几个部分:协议.网络地址.资源路径.其中网络地址指示该连接网络上哪一台计算机,可以是域名或者IP地址,可以包括端口号:协议是从该计 算机获取资源的方式,常见的是HTTP.FTP,不 ...
- java获取中问名字的首字母
public class FirstLetterUtil { private static int BEGIN = 45217; private static int END = 63486; // ...
- Generator 函数的含义与用法
Generator 函数是协程在 ES6 的实现,最大特点就是可以交出函数的执行权(即暂停执行). function* gen(x){ var y = yield x + 2; return y; } ...