调用函数与调度事件

时间:2013-02-25 16:58:26

标签: actionscript-3 oop events design-patterns observer-pattern

当你可以直接调用函数时,有什么用于创建这样的事件。

例如

var customEvent:Event = new Event("ev");
_myObject.addEventListener("ev", handler);

private function handler(e:Event):void
{
    //Do something
}

//And then dispatching the event else where like this
_myObject.dispatchEvent(customEvent);

当你可以像这样直接调用函数时

handler();
private function handler():void
{
//do something
}

自定义事件究竟是什么意思?在这种情况下,我应该使用哪一个来提高效率和最少的资源消耗?

2 个答案:

答案 0 :(得分:6)

如果发送事件,“调度员”不需要了解有关侦听器的任何信息。甚至可能没有听众存在。

如果直接调用函数,它必须知道函数的名称,它必须引用实现该函数的对象,依此类推。它使代码更难重用。

答案 1 :(得分:0)

就效率而言,在我的诚实意见可维护性方面,您应该更喜欢直接方法调用。

事件更通用,通常用于Publish-subscribe模式。您可以使用任何语言轻松创建基于事件的系统,并且可以为每个可以分派的事件维护订阅者列表。必须检查并遍历此列表,调用所有订阅者,这通常可以通过字典或其他数据结构相当有效地完成。

如果您坚持使用一致的消息传递模式,那么事件可以帮助从GUI表示中抽象逻辑。许多语言使用事件与GUI系统集成,包括C#,AS3,Objective-C。

一般情况下,随着项目大小的增加,消息系统变得越来越难以维护,因为您将失去编译时间检查以支持更通用的动态调度机制。