事件驱动模型与观察者模式

你有一件事情,做这件事情的过程包含了许多职责单一的子函数。当这些子函数有如下特点时,我们应该考虑设计一种合适的框架,让框架来完成一些业务无关的事情,从而使得各个子过程的开发可以专注于自己的业务。降低程度耦合程度。

  • 这些子过程有一定的执行次序
  • 这些子过程之间需要较灵活的跳转
  • 这些子过程也许需要围绕同一个上下文做操作

此时可以考虑使用事件驱动的方式来组织这些子过程,此时这些子函数可以被称之为事件处理器(或监听器),而将事件处理器组织起来的管理者,叫做事件中心。最显而易见的实现方式,是观察者模式,或者监听者模式。作为一个例子,考虑一个消息转发系统,它从上游接收消息,然后转发给正确的下游用户。整个过程可以拆分为消息解析、消息存储、消息发送等步骤。

观察者模式

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

事件处理器

事件使用

在一个对象中发送事件:

1
EventMgr.DispatchEvent("MobRefresh",ring,mobRefreshConfig)

先在一个对象中订阅,当另一个对象发送事件时再作处理:

1
2
3
4
5
EventMgr.RegEvent("MobRefresh", self)

function Scene:MobRefresh(ring, config)
print("MobRefresh",ring)
end

事件分发器的实现

GEventMgr.lua


¡Qué suerte que tienes con tu nuevo matrimonio!, si es que te va de película.