一、总摘要

1,作者

让我们从日常生活中做一个简单的例子。我们租的房屋中介和房屋中介租房,房东出租形式之间的中介,租房者不在乎自己这套房子的租金,房东的出租人不在乎他租金。这种交易变得如此方便,因为中介的存在。

在软件开发过程中,必然会遇到这样的情况:多个类或子系统相互作用,交互非常繁琐,每个类都必须知道需要交互的类,因此它们之间的耦合将非常严重,结果非常严重,大熊非常生气!(~ ~ ~ ~ ~ ~ ~ _ ~ > <)

既然问题提出了,那么我们在这个时期就起主导作用了——中介模式出来了。



中介器的作用是封装对象之间的交互,如果一个对象的操作能引起其他相关对象的改变,而对象本身不想处理这些关系,那么它就可以去找代理,让它处理这些麻烦的关系:

复制代码代码如下所示:

var参与者=函数(名称){

this.name =名称;

this.chatroom = null;

};

participant.prototype = { {

发送:函数(消息,to){

This.chatroom.send(消息,这对);

},

接收:函数(消息,从){

log.add(from.name + + this.name +:+信息);

}

};

聊天室功能(){ var =()

var参与者{ };

返回{

寄存器:函数(参与者){

参与者{参与者;

这participant.chatroom =;

},

发送:函数(消息,从,到){

如果(to){

to.receive(消息、从);

{人}

对于(参与者中的键){

如果(参与者{键}!=从){

参与者{键}接收(消息,从);

}

}

}

}

};

};

var =(函数()){()

var log;

返回{

添加函数:;;},

显示函数(){警报(log);log = ;}

}

});

函数运行(){

Var Yoko =新的参与者(妻子);

var =新参与者();

Var Paul =新参与者(保罗);

新参与者();

聊天室聊天室()=新功;

chatroom.register(Yoko);

chatroom.register(约翰);

Chatroom.register (Paul);

chatroom.register(RIN);

Yoko.send(所有你需要的是爱。);

Yoko.send(我爱你,约翰。);

John.send(嘿,不需要广播

Paul.send(哈哈,我听说!;

Rin.send(保罗,你怎么认为

Log.show();

}



在示例代码中,我们有四个参与者,通过注册一个聊天室(中介)来添加聊天会话,每个参与者的参与者代表,参与者互相发送消息和聊天室的处理路线。

这里的聊天室对象起中介作用,协调其他对象,合理组织,减少耦合。

二、源案例参考

我们应该熟悉MVC三层模型实体模型(模型)、视图表示层(视图)和控制层(控制/中介)。

控制层是表示层与模型层之间的中介,一般来说,MVC也是中介模型在框架设计中的应用。



三,案例介绍

复制代码代码如下所示:

函数播放器(名称){

this.points = 0;

this.name =名称;

}

(player.prototype.play =功能){

this.points = 1;

Mediator.played();

};

var记分卡= {

元:document.getelementbyid('results),

更新:函数(得分){

var i,味精=;

为(我在得分){

如果(score.hasownproperty(I)){

+ +;

味精=得分{我};

+;

}

}

this.element.innerhtml =味精;

}

};

var中介{ {

球员:{ },

安装程序:函数(){

VaR的球员= this.players;

players.home =新球员('home');

players.guest =新球员(客用的);

},

播放:函数(){

VaR的球员= this.players,

得分= { {

家庭:players.home.points,

客人:players.guest.points

};

Scoreboard.update (score);

},

按键:功能(e){

E = e window.event | |;

如果(e.which = 49){

Mediator.players.home.play();

返回;

}

如果(e.which = 48){

Mediator.players.guest.play();

返回;

}

}

};

Mediator.setup();

window.onkeypress = mediator.keypress;

setTimeout(){()函数(

window.onkeypress = null;

console.log(游戏结束!;

},30000);



四,总结

为什么中介

对象之间有很多交互。每个对象的动作相互依赖,修改一个对象的行为并修改许多其他对象的行为。

如果我们使用中介模式,我们可以使对象之间的耦合松散。我们只需要关注与调解人的关系,使多对多关系成一对多关系。

降低了系统的复杂度,提高了系统的可扩展性。

使用中介模式的场合

1。一组定义良好的对象现在用于复杂的通信。

2。自定义一个分布在多个类中且不希望生成太多子类的行为。

可以看出,中介对象主要是用来封装行为的,行为的参与者是那些对象,但通过中介,这些对象不需要相互了解(德米特里定律的具体实现)。

使用中介模式的优点:

1。减少系统对象之间的耦合,从而使对象易于重用。

2。提高了系统的灵活性,使系统易于扩展和维护。

使用中介模式的缺点:

中介模式的弊端是显而易见的,因为中介承担了更多的责任,一旦中介对象出现问题,整个系统就会受到很大的影响。