宝哥软件园

详细解释JavaScript设计模式的中介模式示例

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

本文展示了JavaScript设计模式的中介模式。分享给大家参考,如下:

1.定义

Mediator模式封装了一系列对象交互的方式,因此这些对象不必明显地相互交互。以便它们可以松散耦合。当某些对象之间的交互发生变化时,不会立即影响其他对象之间的交互。确保这些功能可以相互独立地更改。中介模型将多对多的交互转化为一对多的交互。中介模型抽象了对象的行为和协作,分离了小规模行为中对象与其他对象之间的交互。

2.使用原因

当对象之间存在多个交互操作,且每个对象的行为相互依赖时,为了防止一个对象的行为被修改,同时多个其他对象被修改,可以采用中介器模式来解决紧耦合问题。

该模型将对象之间的多对多关系变为一对多,中介对象将系统从网状结构变为以中介为中心的星型结构,从而降低了系统的复杂性,提高了可扩展性。

中介器设计模式结构图:

调解器模式包括以下角色:

抽象调解人角色:定义同事对象到调解人对象的接口,其中主要方法是一个(或多个)事件方法。具体中介器的作用:实现抽象中介器声明的事件方法。调解员认识所有具体的同事,负责协调同事之间的互动。抽象同事角色:定义从调解员到同事对象的接口。同事只认识调解员,不认识其他人。具体同事角色:所有具体同事类都继承自抽象同事类。实现自己的事业,当你需要和其他同事沟通的时候,就要和调解员沟通,调解员会负责和其他同事互动。

JS实现代码:

光盘驱动器

函数CDDriver(mediator) {//持有一个mediator对象this.mediator=mediator/* * *获取当前同事类对应的中介对象*/this。get mediator=function(){ return mediator;}//光驱读取的数据是这样的,data=' ';/* * *获取从光盘读取的数据*/this . getdata=function(){ return this . data;}/* * *读CD */this.readCD=function(){ //逗号前是视频显示的数据,逗号后是声音this.data='西游记,总要来!';//通知主板其状态已经改变。这个。getmediator()。变了(这个);}}CPU处理器

函数CPU(mediator) {//持有一个mediator对象this.mediator=mediator/* * *获取当前同事类对应的中介对象*/this。get mediator=function(){ return mediator;}//分解后的视频数据this.videoData=//分解的语音数据this.soundData=/* * *获取分解后的视频数据*/this . getvideodata=function(){ return this . videodata;}/* * *获取分解后的声音数据*/this . getsounddata=function(){ return this . sounddata;}/* * *处理数据并将其分为音频和视频数据*/this。execute data=function(data){//拆分数据,视频数据在前,音频数据var array=data.split(',')在后;this.videoData=数组[0];this.soundData=数组[1];//通知主板CPU已经完成了本次的工作。getmediator()。变了(这个);}}显卡

函数VideoCard(mediator) {//持有一个mediator对象this.mediator=mediator/* * *获取当前同事类对应的中介对象*/this。get mediator=function(){ return mediator;}/* * *显示视频数据*/这个。show data=function(data){ console . log('正在播放的是:' data ');}}声卡

函数SoundCard(mediator ){ //持有一个mediator对象this.mediator=mediator/* * *获取当前同事类对应的中介对象*/this。get mediator=function(){ return mediator;}/* * *声音根据音频数据*/这个。sound data=function(data){ console . log(' output audio:' data ');}}特定的中介类

function主板(){//需要知道同事类——光驱类this.cdDriver=null//你需要知道同事类——CPU类this.cpu=null//你需要知道同事类——显卡类this.videoCard=null//你需要知道同事类——声卡类this.soundCard=nullthis . setcddriver=function(cdDriver){ this . cdDriver=cdDriver;} this.setCpu=函数(Cpu){ this . Cpu=Cpu;} this . setvideo card=function(video card){ this . video card=video card;} this . setsoundcard=function(sound card){ this . sound card=sound card;}这个。changed=function (c) {if(光盘驱动器的c实例){//表示光盘驱动器已读取此内容。opecddriverredata(c);} else if(CPU的c实例){ this . opecpu(c);}}/* * *处理光盘读取数据后与其他对象的交互*/这个。opecddriveradata=function(CD){//获取光驱读取的数据第一个var data=CD . getdata();//将这些数据传递给CPU进行处理。executedata(数据);}/* * *处理数据后处理CPU与其他对象的交互*/this.opeCPU=function(cpu){ //先得到CPU处理的数据var video data=CPU . getvideo data();var soundData=CPU . getsounddata();//把这些数据传到显卡和声卡来显示这个。video card . show data(video data);this.soundCard.soundData(声音数据);}}客户端

//create mediator ——主板var mediator=new主板();//创建同事类var cd=new CDDriver(中介器);var cpu=新cpu(中介器);var vc=new VideoCard(调解员);var sc=新声卡(中介);//让调解员认识所有同事调解员. setcddriver(CD);mediator . setCpu(CPU);mediator . setvideo card(VC);mediator . SetSoundCard(sc);//开始看电影,将光盘放入光驱,光驱开始读取CD . read CD();复制效果

调解人模式的优势

松耦合:mediator模式将几个同事对象之间的交互封装成Mediator对象,使同事对象之间松耦合,基本可以实现互补依赖。这样同事就可以独立改变和重用,而不是像以前那样“抱一处动全身”。交互的集中控制:将多个同事对象的交互封装在中介对象中进行集中管理,这样当这些交互行为发生变化时,只需要修改中介对象即可。当然,如果系统已经完成,介体对象会被展开,每个同事类都不需要修改。多对多变成一对多:不使用中介模型时,同事之间的关系通常是多对多。介体对象引入后,介体对象和同事对象之间的关系通常会双向变成一对多,这样会使对象关系更容易理解和实现。

中介模型的缺点

中介模式的一个潜在缺点是过度集中。如果同事之间的互动非常复杂,当所有这些复杂性都集中在调解员身上时,调解员就会变得非常复杂,难以管理和维护。

关于JavaScript的更多信息,请参考本网站的主题:《javascript面向对象入门教程》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》、《JavaScript数学运算用法总结》、0103010。

希望本文对JavaScript编程有所帮助。

更多资讯
游戏推荐
更多+