JavaScript调停者模式(详细教程)

这篇文章主要介绍了javascript设计模式调停者模式,详细分析了调停者模式的概念、原理、优缺点并结合javascript实例形式给出了相关使用技巧,需要的朋友可以参考下

本文实例讲述了JavaScript设计模式之调停者模式。分享给大家供大家参考,具体如下:

1、定义

调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用。从而使他们可以松散偶合。当某些对象之间的作用发生改变时,不会立即影响其他的一些对象之间的作用。保证这些作用可以彼此独立的变化。调停者模式将多对多的相互作用转化为一对多的相互作用。调停者模式将对象的行为和协作抽象化,把对象在小尺度的行为上与其他对象的相互作用分开处理。

2、使用的原因

立即学习“Java免费学习笔记(深入)”;

当对象之间的交互操作很多,且每个对象的行为操作都依赖彼此时,为防止在修改一个对象的行为时,同时涉及到修改很多其他对象的行为,可采用调停者模式,来解决紧耦合问题.

该模式将对象之间的多对多关系变成一对多关系,调停者对象将系统从网状结构变成以调停者为中心的星形结构,达到降低系统的复杂性,提高可扩展性的作用.

调停者设计模式结构图:

JavaScript调停者模式(详细教程)

调停者模式包括以下角色:

●抽象调停者(Mediator)角色:定义出同事对象到调停者对象的接口,其中主要方法是一个(或多个)事件方法。
●具体调停者(ConcreteMediator)角色:实现了抽象调停者所声明的事件方法。具体调停者知晓所有的具体同事类,并负责具体的协调各同事对象的交互关系。
●抽象同事类(Colleague)角色:定义出调停者到同事对象的接口。同事对象只知道调停者而不知道其余的同事对象。
●具体同事类(ConcreteColleague)角色:所有的具体同事类均从抽象同事类继承而来。实现自己的业务,在需要与其他同事通信的时候,就与持有的调停者通信,调停者会负责与其他的同事交互。

JS实现代码:

CD光驱

function CDDriver( mediator ) {  //持有一个调停者对象  this.mediator = mediator;  /**   * 获取当前同事类对应的调停者对象   */  this.getMediator = function() {    return mediator;  } //光驱读取出来的数据 this.data = "";  /**   * 获取光盘读取出来的数据   */  this.getData = function() {    return this.data;  }  /**   * 读取光盘   */  this.readCD = function(){    //逗号前是视频显示的数据,逗号后是声音    this.data = "西游记,老孙来也!";    //通知主板,自己的状态发生了改变    this.getMediator().changed(this);  }}

登录后复制

CPU处理器

function CPU( mediator ) { //持有一个调停者对象 this.mediator = mediator; /**  * 获取当前同事类对应的调停者对象  */ this.getMediator = function() {   return mediator; }  //分解出来的视频数据  this.videoData = "";  //分解出来的声音数据  this.soundData = "";  /**   * 获取分解出来的视频数据   */  this.getVideoData = function() {    return this.videoData;  }  /**   * 获取分解出来的声音数据   */  this.getSoundData = function() {    return this.soundData;  }  /**   * 处理数据,把数据分成音频和视频的数据   */  this.executeData = function(data){    //把数据分解开,前面是视频数据,后面是音频数据    var array = data.split(",");    this.videoData = array[0];    this.soundData = array[1];    //通知主板,CPU完成工作    this.getMediator().changed(this);  }}

登录后复制

显卡

function VideoCard( mediator ) {  //持有一个调停者对象  this.mediator = mediator;  /**   * 获取当前同事类对应的调停者对象   */  this.getMediator = function() {    return mediator;  }  /**   * 显示视频数据   */  this.showData = function(data){    console.log("正在播放的是:" + data);  }}

登录后复制

声卡

function SoundCard( mediator ){  //持有一个调停者对象  this.mediator = mediator;  /**   * 获取当前同事类对应的调停者对象   */  this.getMediator = function() {    return mediator;  }  /**   * 按照声频数据发出声音   */  this.soundData = function(data){    console.log("输出音频:" + data);  }}

登录后复制

具体调停者类

function MainBoard() {  //需要知道要交互的同事类——光驱类  this.cdDriver = null;  //需要知道要交互的同事类——CPU类  this.cpu = null;  //需要知道要交互的同事类——显卡类  this.videoCard = null;  //需要知道要交互的同事类——声卡类  this.soundCard = null;  this.setCdDriver = function(cdDriver) {    this.cdDriver = cdDriver;  }  this.setCpu = function(cpu) {    this.cpu = cpu;  }  this.setVideoCard = function(videoCard) {    this.videoCard = videoCard;  }  this.setSoundCard = function(soundCard) {    this.soundCard = soundCard;  }  this.changed = function(c) {    if(c instanceof CDDriver){      //表示光驱读取数据了      this.opeCDDriverReadData(c);    }else if(c instanceof CPU){      this.opeCPU(c);    }  }  /**   * 处理光驱读取数据以后与其他对象的交互   */  this.opeCDDriverReadData = function(cd){    //先获取光驱读取的数据    var data = cd.getData();    //把这些数据传递给CPU进行处理    cpu.executeData(data);  }  /**   * 处理CPU处理完数据后与其他对象的交互   */  this.opeCPU = function(cpu){    //先获取CPU处理后的数据    var videoData = cpu.getVideoData();    var soundData = cpu.getSoundData();    //把这些数据传递给显卡和声卡展示出来    this.videoCard.showData(videoData);    this.soundCard.soundData(soundData);  }}

登录后复制

客户端

//创建调停者——主板var mediator = new MainBoard();//创建同事类var cd = new CDDriver(mediator);var cpu = new CPU(mediator);var vc = new VideoCard(mediator);var sc = new SoundCard(mediator);//让调停者知道所有同事mediator.setCdDriver(cd);mediator.setCpu(cpu);mediator.setVideoCard(vc);mediator.setSoundCard(sc);//开始看电影,把光盘放入光驱,光驱开始读盘 cd.readCD();

登录后复制

打印效果

JavaScript调停者模式(详细教程)

调停者模式的优点

● 松散耦合:调停者模式通过把多个同事对象之间的交互封装到调停者对象里面,从而使得同事对象之间松散耦合,基本上可以做到互补依赖。这样一来,同事对象就可以独立地变化和复用,而不再像以前那样“牵一处而动全身”了。
● 集中控制交互:多个同事对象的交互,被封装在调停者对象里面集中管理,使得这些交互行为发生变化的时候,只需要修改调停者对象就可以了,当然如果是已经做好的系统,那么就扩展调停者对象,而各个同事类不需要做修改。
● 多对多变成一对多:没有使用调停者模式的时候,同事对象之间的关系通常是多对多的,引入调停者对象以后,调停者对象和同事对象的关系通常变成双向的一对多,这会让对象的关系更容易理解和实现。

调停者模式的缺点

调停者模式的一个潜在缺点是,过度集中化。如果同事对象的交互非常多,而且比较复杂,当这些复杂性全部集中到调停者的时候,会导致调停者对象变得十分复杂,而且难于管理和维护。

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

为什么Node.js会成为Web应用开发?

为什么Node.js会成为Web应用开发?

为什么Node.js会成为Web应用开发?

以上就是JavaScript调停者模式(详细教程)的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/3187127.html

(0)
上一篇 2025年3月31日 23:05:31
下一篇 2025年3月31日 23:05:41

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • PHP7.0中的设计模式有哪些?

    随着技术的不断发展,设计模式在软件开发中变得越来越重要。php7.0作为最新的php版本,也集成了许多的设计模式。在本文中,我们将探讨php7.0中的设计模式,以帮助php程序员更好地理解和应用这些模式。 单例模式 单例模式是一种创建型模式…

    编程技术 2025年4月28日
    000
  • PHP中如何实现装饰器模式?

    在php中实现装饰器模式可以动态扩展对象功能,无需大量子类。具体步骤包括:1.定义组件接口(beverage)和具体组件(coffee);2.创建装饰器抽象类(condimentdecorator)和具体装饰器(milk、sugar);3.…

    2025年4月27日
    000
  • 详解js在html中的加载执行顺序

    js在html中的加载执行顺序 1.加载顺序:引入标记的出现顺序, 页面上的js代码是js的一部分,所以Javascript在页面装载时执行的顺序就是其引入标记的出现顺序, 标记里面的或者通过src引入的外部JS,都是按照其语句出现的顺序执…

    编程技术 2025年4月4日
    100
  • HTML和JS实现简单的计算器

    HTML和JS实现计算器功能的也是很容易的,本文主要和大家分享HTML和JS实现简单的计算器,希望能帮助到大家。 下面是代码:    nbsp;html>无标题文档 var result=””; function jisuan(num…

    编程技术 2025年4月4日
    100
  • 实现在HTML页面加载完毕后运行js方法

    本文主要和大家分享实现在HTML页面加载完毕后运行js方法,主要以代码的方法和大家分享,希望能帮助到大家。 Js方法: window.onload=function (){ var userName=”xiaoming”; alert(us…

    编程技术 2025年4月4日
    100
  • JavaScript实现获取远程的html到当前页面中

    今天做个项目,需要在当前的html页面中引用一个远程的html页面,百度了一下,发现一个非常好用的代码,这里分享给大家,有相同需求的小伙伴可以来看看 html代码 登录后复制 立即学习“Java免费学习笔记(深入)”; javascript…

    编程技术 2025年4月4日
    200
  • JavaScript模块优化

    给大家分享一下如何才能开发出更好的javascript模块和功能,有兴趣的朋友参考学习下吧。 不少人都曾经在 npm 上发布过自己开发的 JavaScript 模块,而在使用一些模块的过程中,我经常产生“这个模块很有用,但如果能 xxx 就…

    编程技术 2025年4月4日
    100
  • Java框架中设计模式与架构模式的区别

    在 java 框架中,设计模式和架构模式的区别在于:设计模式定义了在软件设计中解决常见问题的抽象解决方案,关注类和对象之间的交互,如工厂模式。架构模式定义了系统结构和模块之间的关系,关注系统组件的组织和交互,如分层架构。 Java框架中的设…

    2025年4月2日
    100
  • MyBatis框架中设计模式的应用

    mybatis框架广泛应用设计模式,包括:工厂模式:创建sqlsessionfactory对象,管理数据库连接和查询;代理模式:实现延迟加载和懒加载,提高性能。外观模式:封装对数据库访问,简化代码维护。其中,一对多关系映射可以通过user和…

    2025年4月2日
    100
  • 如何选择适合Java框架的设计模式?

    要选择适合 java 框架的设计模式,需按以下步骤进行:识别问题域:明确要解决的问题。考虑实现成本:评估模式的复杂性和维护成本。确保可扩展性:选择允许应用程序轻松适应变化需求的模式。关注可维护性:模式应具有良好的可读性和可理解性。 如何选择…

    2025年4月2日
    200

发表回复

登录后才能评论