如何在Javascript中对多个中介实例使用中介模式?
据我所知,使用中介模式类似于:如何在Javascript中对多个中介实例使用中介模式?,javascript,design-patterns,mediator,facade,Javascript,Design Patterns,Mediator,Facade,据我所知,使用中介模式类似于: 模块只发布,不订阅。中介订阅事件,并使其他模块基于这些事件执行操作 例如,假设我们有一个javascript编辑器。假设有一个编辑器(用于代码)和一个运行选项卡(您可以在其中单击运行并查看代码的输出)。每个模块都有自己的模块。当用户单击run时,run选项卡模块输出一个类似“runButtonClicked”的事件,中介订阅该事件,并在触发该事件时运行代码。这个例子有点做作和简化,但希望这能让我了解我想要实现的目标 假设您有一些“类”Mediator,每个模块
- 模块只发布,不订阅。中介订阅事件,并使其他模块基于这些事件执行操作
Mediator
,每个模块都通过Pub/Sub与之通信
如果我正确理解了这个模式,那么这一切都是有意义的。但是当你想在页面上有这个核心“应用程序”的多个实例时,一个问题似乎出现了——应用程序如何知道哪些事件需要响应,哪些应该留给页面上的其他实例
看起来我需要多个中介,但我不确定这些中介将如何传递到对象中
var mediator = new Mediator();
var moduleOne = new moduleOne(mediator);
var moduleTwo = new moduleTwo(mediator);
这种方法似乎有问题,因为我希望访问中介中的这两个模块
我也听说过中介使用沙箱/门面模式,但我不确定这两种模式是否有用(也就是说,我不太了解它们)
更新
我刚刚发现,这似乎是一个可能的解决办法。但我也想知道我是否正确地使用和思考了这些模式。应用程序的每个实例都需要自己的事件空间(或通道),以便其事件不会污染其他实例。如果应用程序实例需要彼此对话,则可能需要更多的事件空间。根据您使用的事件库,有几种方法可以做到这一点:
var mediator = new Mediator();
var moduleOne = new moduleOne;
var moduleTwo = new moduleTwo;
moduleOne.mediator = mediator;
mediator.register(moduleOne);
moduleTwo.mediator = mediator;
mediator.register(moduleTwo);
“中介订阅事件并使其他模块基于这些事件执行操作”-您能给出一个示例用例吗?它可能有助于验证您的模式选择。只需更新一个示例。这有用吗?本例中的想法可能是,我们希望该编辑器的多个实例出现在页面上。我们如何使用信息系统处理这些问题?谢谢!那么我是否正确地使用了这个模式?还有其他模式可以帮助解决这个问题吗?还有一个问题:中介是否应该设置事件处理程序(例如单击)。还是应该在模块中处理?@JoshuaKravitz,当我第一次学习设计模式时,我问IDE中是否有什么东西可以为我生成代码模板。这是使用模式的错误方法,因为模式不是配方。我建议您将MP作为代码责任划分的原则。您可以使用MP将管理事件的责任从模块转移到中介。您可以选择要卸下多少责任。谢谢!这其实很有帮助。我在网上看到的都是模糊的小例子,很难应用,但我想这是因为原则比具体的实现更重要。再次感谢。