正如我前段时间从类似帖子中学到的:
中介者模式提供了一个标准的 API 供模块使用。
让我们举个例子:
您的应用程序的数千个模块严重依赖 jQuery 的$.post
. 如果突然间,您的公司遇到许可问题并决定迁移到例如 MooTools 或 YUI,您会查找所有使用的代码$.post
并将其替换为类似的代码MooTools.post
吗?
中介者模式通过规范化 API 解决了这个危机。模块所知道的是,您的中介有一个发布功能,无论使用什么库,它都可以进行 AJAX 发布。
//module only sees MyMediator.post and only knows that it does an AJAX post
//How it's implemented and what library is used is not the module's concern
jQuery.post -> MyMediator.post -> module
MooTools.post -> MyMediator.post -> module
YUI.post -> MyMediator.post -> module
中介充当模块间通信的“中间人”。
新手 JS 开发中的一个问题是模块是相互依赖的。那是什么时候:
MyClassA.something = MyClassB.method();
MyClassB.something = MyClassA.method();
但是,如果出现问题MyClassB
并且开发人员将其从构建中删除怎么办。您是否会查找并删除该用途中的所有代码MyClassA
,以MyClassB
使其不会因缺少而中断MyClassB
?
中介者模式publish
和subscribe
模式通过使模块订阅事件而不是直接与其他模块交互来解决这个问题。中介充当事件发布时触发的回调/订阅的集合。
这种“匿名”订阅导致部分松耦合。模块仍然需要知道要监听哪些模块或至少要监听一组事件,但它们的连接方式不会导致任何一个被取出时损坏。他们所知道的是他们订阅了该事件并将在该事件发生时执行 - 无论是谁触发它,它是否触发,或者触发器是否存在。
于 2012-09-21T16:38:06.770 回答