Event Registry设计模式?

时间:2010-10-29 16:48:32

标签: design-patterns architecture grails groovy

我有一个事件列表,我需要在用户执行操作时触发事件,以及触发这些事件的事件管理器。

最初我曾经以这种方式明确地发射事件

EventManager.publish(new SendNotificationEvent())

然后我想将其更改为

EventManager.publishSendNotificationEvent()

要做到这一点,我需要动态加载类“SendNotificationEvent”,实例化它并触发事件。处理ClassLoder会动态地使用反射,缓慢和痛苦来处理。所以我想到在加载根类Event时注册事件

Event {
 Map registry = [:]
 static {
   registry["SendNotificationEvent"] = SendNotificationEvent.class
 }

 Class get(String key) {
    return registry[key]
 }
}

并更改事件管理以通过事件

解析事件类
EventManager {
 Class $static_methodMissing (String name, args) {
    def event Event.get(name-"fire").metaClass.invokeConstructor(args)
    fire(event)
 }
}

这是一个好方法,是否有一种设计模式可以用来更好地做到这一点,或者我应该忍受ClassLoader的痛苦并让它工作......

1 个答案:

答案 0 :(得分:0)

我更喜欢你的第一种方式(我必须同意FabrizioM的评论 - 为什么?)

我喜欢EventManager.publish(new SendNotificationEvent()),因为EventManager对事件一无所知;这将使您的系统更容易维护(等)。

编码就像一种运动形式:如果它开始受伤,你应该停止。