Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
losophy opened this issue Apr 15, 2021 · 0 comments
Open

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

losophy opened this issue Apr 15, 2021 · 0 comments
Labels

Comments

@losophy
Copy link
Owner

losophy commented Apr 15, 2021

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

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

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

观察者模式

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

事件处理器

事件使用

在一个对象中发送事件:

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

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

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.

@losophy losophy changed the title 事件 事件处理器 May 23, 2021
@losophy losophy changed the title 事件处理器 事件驱动模型和观察者模式 May 23, 2021
@losophy losophy changed the title 事件驱动模型和观察者模式 事件驱动模型与观察者模式 May 23, 2021
@losophy losophy transferred this issue from another repository May 23, 2021
@losophy losophy added the design label May 23, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant