【问题标题】:Calling functions vs dispatching events调用函数与调度事件
【发布时间】:2013-02-25 16:58:25
【问题描述】:

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

例如

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
}

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

【问题讨论】:

  • 通过调度的事件,您可以从任何线程调度事件,但始终从单个线程运行处理程序。对于需要从 GUI 事件线程运行绘图例程的 GUI 代码来说非常常见。也许处理程序调用的函数是不可重入的。
  • 你更应该关注信号而不是事件。如果没有事件/信号,管理回调函数引用会变得乏味。

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


【解决方案1】:

在调度事件的情况下,“调度程序”不需要了解任何有关侦听器的信息。甚至可能不存在听众。

在直接调用函数的情况下,它必须知道函数的名称,它必须具有对实现该函数的对象的引用,等等。它使代码更难重用。

【讨论】:

    【解决方案2】:

    就效率而言,在我看来,可维护性,您应该更喜欢直接方法调用。

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-17
      • 2018-05-31
      • 1970-01-01
      • 2011-02-27
      相关资源
      最近更新 更多