TAT.svenzeng 【Javascript 设计模式 11】-中介者模式
In 未分类 on 2012年10月24日 by view: 12,703
11

中介者对象可以让各个对象之间不需要显示的相互引用,从而使其耦合松散,而且可以独立的改变它们之间的交互。

打个比方,军火买卖双方为了安全起见,找了一个信任的中介来进行交易。买家 A 把钱交给中介 B,然后从中介手中得到军火,卖家 C 把军火卖给中介,然后从中介手中拿回钱。一场交易完毕,A 甚至不知道 C 是一只猴子还是一只猛犸。因为中介的存在,A 也未必一定要买 C 的军火,也可能是 D,E,F。

银行在存款人和贷款人之间也能看成一个中介。存款人 A 并不关心他的钱最后被谁借走。贷款人 B 也不关心他借来的钱来自谁的存款。因为有中介的存在,这场交易才变得如此方便。

中介者模式和代理模式有一点点相似。都是第三者对象来连接 2 个对象的通信。具体差别可以从下图中区别。

代理模式:

中介者模式

代理模式中 A 必然是知道 B 的一切,而中介者模式中 A,B,C 对 E,F,G 的实现并不关心. 而且中介者模式可以连接任意多种对象。

切回到程序世界里的 mvc,无论是 j2ee 中 struts 的 Action. 还是 js 中 backbone.js 和 spine.js 里的 Controler. 都起到了一个中介者的作用.
拿 backbone 举例. 一个 mode 里的数据并不确定最后被哪些 view 使用. view 需要的数据也可以来自任意一个 mode. 所有的绑定关系都是在 controler 里决定. 中介者把复杂的多对多关系, 变成了 2 个相对简单的 1 对多关系.

一段简单的示例代码:

[目录]

原创文章转载请注明:

转载自AlloyTeam:http://www.alloyteam.com/2012/10/javascript-design-pattern-intermediary-model/

  1. laoya 2012 年 11 月 21 日

    backbone 貌似是分成 model collection 和 view,其中 collection 是 model 的集合,并不起 controler 的中介作用,model 和 view 的关系是直接从 view 的 model 参数指定的,不过个人认为 backbone 的模式是不错的,强求严格意义的 mvc 并没多大好处,可能反而适得其反,没有最好,只有更合适。

  2. Stacy 2012 年 10 月 29 日

    高手!

  3. 【Javascript设计模式5】-代理模式 | Tencent AlloyTeam 2012 年 10 月 25 日

    […] 中介者模式 […]

  4. 【Javascript设计模式15】-职责链模式 | Tencent AlloyTeam 2012 年 10 月 25 日

    […] 中介者模式 […]

  5. 【Javascript设计模式16】- 享元模式 | Tencent AlloyTeam 2012 年 10 月 25 日

    […] 中介者模式 […]

发表评论到 【javascript设计模式17】- 状态模式 | Tencent AlloyTeam