【发布时间】:2014-09-17 16:32:36
【问题描述】:
据我了解,使用中介者模式看起来像:
- 仅模块发布,但不订阅。中介者订阅事件并让其他模块根据这些事件执行操作。
例如,假设我们有一个 javascript 编辑器。假设有一个编辑器(用于代码)和一个运行选项卡(您可以在其中单击运行并查看代码的输出)。每一个都是它自己的模块。当用户点击运行时,运行选项卡模块会输出一个类似“runButtonClicked”的事件,中介订阅该事件并在该事件触发时运行代码。这个例子有点做作和简化,但希望这能让我对我想要实现的目标有所了解。
假设您有一些“类”Mediator,每个模块都通过 Pub/Sub 与之通信。
如果我正确理解了这种模式,那么这一切都是有道理的。但是,当您希望在页面上拥有此核心“应用程序”的多个实例时,似乎出现了一个问题——应用程序如何知道要响应哪些事件以及哪些事件应该留给页面上的其他实例?
似乎我想要多个中介,但我不确定这些将如何传递到对象中。
var mediator = new Mediator();
var moduleOne = new moduleOne(mediator);
var moduleTwo = new moduleTwo(mediator);
这种方法似乎有问题,因为我想访问调解器内部的这两个模块。
我还听说过与中介一起使用的沙盒/外观模式,但我不确定其中任何一个是否会有所帮助(也就是说,我不太了解它们)。
更新 我刚刚找到Mediator pattern and creation,这似乎是一个可能的解决方案。但我也想知道我是否正确地使用和思考这些模式。
【问题讨论】:
-
“中介者订阅事件并让其他模块根据这些事件做事” - 你能举个例子吗?它可能有助于验证您的模式选择。
-
只更新一个例子。这有帮助吗?这个例子中的想法可能是我们希望页面上有多个这个编辑器的实例。我们如何使用消息传递系统处理这个问题?
标签: javascript design-patterns mediator facade