【发布时间】:2013-05-09 13:55:26
【问题描述】:
是否有内置功能可以在 dart 中创建可事件类型?
在我的 Javascript 应用程序中,我使用一个名为 Eventable 的类来提供以下功能:
var dog = new Dog() //where Dog inherits from Eventable
var cat = new Cat() //where Cat inherits from Eventable
//use 'on' to listen to events
cat.on(dog, 'bark', cat.runaway); //assuming Cat has a method runaway on its prototype
//use fire to launch events
dog.fire({type: 'bark'}); //this causes cat.runaway(event); to be called
javascript 中一种非常常见的模式,我喜欢它,因为它可以帮助我将对象隔离在 src 和我的脑海中。
使用on 方法创建一个new EventContract,它具有基于所有者(以上cat)、客户端(以上dog)、类型(以上'bark')和功能(@987654327)的唯一键@ 以上)。这个唯一键允许我确保不会创建重复的 EventContracts,但更重要的是,它允许我保留一个易于查找对象所有 EventContracts 的集合,以便我可以调用:
cat.dispose();
cat 的所有事件合约都将被销毁,因此我确信所有对 cat 的外部引用都已被删除,并且现在可以对 cat 进行 GC。
但我发现很难在 Dart 中实现此功能,因为执行以下操作:cat.on(dog, 'bark', cat.runaway); 会导致生成一个新函数以包含 (){cat.runaway();} 以及我可以从标准函数对象中获取的唯一唯一键在 dart 中是它的 hashCode,但这意味着我可以回忆起 cat.on(dog, 'bark', cat.runaway);,它会创建一个新的 EventContract,因为它创建了另一个独特的闭包,而不是像在 javascript 中那样处理对原始函数的引用。
我有没有办法在飞镖中实现这种模式?
【问题讨论】:
标签: events design-patterns dart