宝哥软件园

javascript设计模式的中介

编辑:宝哥软件园 来源:互联网 时间:2021-10-15

一、整体总结。

1、作者谈。

让我们从日常生活中做一个简单的类比。我们去房屋中介租房,房屋中介在租房者和房东之间形成中介。租房者不在乎他租谁。房东不在乎他租谁。因为中介的存在,这种交易变得如此便捷。

在软件开发过程中,必然会遇到这样一种情况:多个类或子系统相互交互,交互非常繁琐,导致每个类都要知道自己需要交互的类,这样它们之间的耦合会极其严重。后果很严重,熊很生气!~~~~(_)~~~~

好了,既然问题已经提出来了,那就有请本期的主角——中介模式。

中介器的功能是封装对象之间的交互。如果一个对象的操作会引起其他相关对象的变化,而对象又不想自己处理这些关系,那么可以去找中介,让它来处理这些麻烦的关系。请看下面的小例子:

复制代码如下: varparticipant=function(name){ this。name=namethis.chatroom=null};participant . prototype={ send : function(message,to) { this.chatroom.send(message,this,to);},接收:函数(消息,来自){ log.add(从. name '到' this.name ': '消息);}};var聊天室=function() { var参与者={ };返回{ register:函数(参与者){ participants[participant . name]=participant;参与者.聊天室=这个;},send:函数(message,from,to) { if (to) { to.receive(message,from);} else { for(键入参与者){ if(参与者[键]!==来自){参与者[密钥]。接收(消息,来自);} } } } };};var log=(function(){ var log=' ';返回{ add:函数(msg){ log=msg ' n ';},show : function(){ alert(log);log=} }})();函数run(){ var Yoko=new Participant(' Yoko ');var john=新参与者(' John ');var paul=新参与者(“保罗”);var ringo=新参与者(“Ringo”);var chat room=new chat room();chat room . register(Yoko);chat room . register(John);chat room . register(Paul);chat room . register(Ringo);yoko.send('你需要的只是爱');发送(我爱你,约翰));john.send(嘿,不需要广播,洋子);(哈,我听到了!’);“保罗,你觉得怎么样?”,保罗);log . show();}

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

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

二、来源案例参考。

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

控制层是表示层和模型层之间的中介。一般来说,MVC可以看作是中介模式在框架设计中的一种应用。

第三,案例介绍。

复制的代码如下:函数播放器(名称){this。点数=0;this.name=name} player . prototype . play=function(){ this . points=1;mediator . played();};var记分板={ element : document . getelementbyid(' results '),update : function(score){ var I,msg=for(I in score){ if(score . hasown property(I)){ msg=' PS trong ' I ' /strong : ';msg=分数[I];msg=' /p ';} } this . element . innerHTMl=msg;}};var mediator={ players: { },setup : function(){ var players=this . players;players.home=新玩家(' Home ');players.guest=新玩家(“Guest”);},played : function(){ var players=this . players,score={ home : players . home . points,guest : players . guest . points };记分板. update(分数);},key press : function(e){ e=e | | window . event;if(e . what===49){ mediator . players . home . play();返回;} if(e . what===48){ mediator . players . guest . play();返回;} }};mediator . setup();window . onkey press=mediator . key press;setTimeout(function(){ window . onkey press=null;控制台日志('游戏结束!');}, 30000);

第四,总结。

为什么是调解员?

对象之间有很多交互操作,每个对象的行为相互依赖。修改一个对象的行为将涉及同时修改许多其他对象的行为。

如果使用Mediator模式,可以放松对象之间的耦合,只关心与Mediator的关系,把多对多的关系变成一对多的关系。

它可以降低系统的复杂性,提高可修改性和可扩展性。

使用中介模式的地方。

1.一组定义良好的对象,现在需要进行复杂的通信。

2.自定义分布在多个类中的行为,而不生成太多子类。

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

使用中介模型的优势:

1.减少了系统对象之间的耦合,使得对象易于独立重用。

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

使用中介模式的缺点:

中介模式的缺点很明显,因为这个“中介”承担的责任比较多,所以一旦中介对象出现问题,整个体系都会受到很大的影响。

更多资讯
游戏推荐
更多+