你的位置:首页 > 软件开发 > Java > 深入理解JavaScript系列(36):设计模式之中介者模式

深入理解JavaScript系列(36):设计模式之中介者模式

发布时间:2012-03-13 10:00:10
前言这两天有些“高手”质疑JavaScript里是否应该有设计模式,甚至讨论到动态语言不应该有设计模式,或者不应该去乱套用设计模式,一直没参与讨论,因为始终觉得自己对这些研究不深,也没尝试过深入理解编译器,词法解析等,更不要提去评论某种语言高不高级了,本人一直处在应用这个level上,没达到那个高级别,所以也不敢参与讨论,以后也不会对这些讨论给予任何评价和回 ...

前言

这两天有些“高手”质疑JavaScript里是否应该有设计模式,甚至讨论到动态语言不应该有设计模式,或者不应该去乱套用设计模式,一直没参与讨论,因为始终觉得自己对这些研究不深,也没尝试过深入理解编译器,词法解析等,更不要提去评论某种语言高不高级了,本人一直处在应用这个level上,没达到那个高级别,所以也不敢参与讨论,以后也不会对这些讨论给予任何评价和回复,呵呵,级别不够。

不管怎么说,针对JavaScript整理的一些设计模式(或模式),我还是会一直完成下去的,因为我觉得国外的一些牛人写的东西确实很好的,而且也解决了自己项目中很多现实的问题,何必在意别人怎么去评价呢,也或者或许把设计模式改成模式就好多了吧,免得让人不爽,毕竟每个人的理解不同嘛。

所以,如果某些高手觉得不爽或者觉得我在害人的,就暂时不要点了,哈哈,免得给我冠上害人凶手或者伪模式的帽子,我可承担不起,呵呵。

不多说啦,开始正事:

介绍

中介者模式(Mediator),用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

主要内容来自:http://www.addyosmani.com/resources/essentialjsdesignpatterns/book/#mediatorpatternjavascript

正文

软件开发中,中介者是一个行为设计模式,通过提供一个统一的接口让系统的不同部分进行通信。一般,如果系统有很多子模块需要直接沟通,都要创建一个中央控制点让其各模块通过该中央控制点进行交互。中介者模式可以让这些子模块不需要直接沟通,而达到进行解耦的目的。

打个比方,平时常见的机场交通控制系统,塔台就是中介者,它控制着飞机(子模块)的起飞和降落,因为所有的沟通都是从飞机向塔台汇报来完成的,而不是飞机之前相互沟通。中央控制系统就是该系统的关键,也就是软件设计中扮演的中介者角色。

我们先用伪代码来理解一下:

// 如下代码是伪代码,请不要过分在意代码    // 广播事件    return {} ());

调用代码,相对就简单了:

(function (Mediator) {    function initialize() {        // 默认值        // 订阅一个事件nameChange    function updateName() {    initialize(); // 初始化})(mediator);

中介者和观察者

到这里,大家可能迷糊了,中介者和观察者貌似差不多,有什么不同呢?其实是有点类似,但是我们来看看具体的描述: // 显示内容的容器 // 更新分数显示 var mediator = { // 所有的player // 初始化 // play以后,更新分数 scoreboard.update(score); // 处理用户按键交互 // go! // 30秒以后结束
setTimeout(function () {
window.onkeypress = null;
console.log('Game over!');
}, 30000);
</script>
</body>
</html>

总结

中介者模式一般应用于一组对象已定义良好但是以复杂的方式进行通信的场合,一般情况下,中介者模式很容易在系统中使用,但也容易在系统里误用,当系统出现了多对多交互复杂的对象群时,先不要急于使用中介者模式,而是要思考一下是不是系统设计有问题。

另外,由于中介者模式把交互复杂性变成了中介者本身的复杂性,所以说中介者对象会比其它任何对象都复杂。

同步与推荐

本文已同步至目录索引:深入理解JavaScript系列

深入理解JavaScript系列文章,包括了原创,翻译,转载等各类型的文章,如果对你有用,请推荐支持一把,给大叔写作的动力。

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:深入理解JavaScript系列(36):设计模式之中介者模式

关键词:JavaScript,设计模式,Mediator,中介者模式

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。