javascript设计模式 ? 中介者模式原理与用法实例分析


Posted in Javascript onApril 20, 2020

本文实例讲述了javascript设计模式 ? 中介者模式原理与用法。分享给大家供大家参考,具体如下:

介绍:在前端开发的过程中,组件与组件之间的通讯特别常见,一个组件的change需要引起数个组件的change,这就需要组件与组件之间存在复杂的多对多关系链。如何来减轻维护这些关系的复杂度,让组件和组件之间实现低耦合?这就是我们即将介绍的中介者模式。

定义:用一个中介对象(中介者)来封装一系列的对象交互,中介者使个对象不需要显式的相互引用,从而使其耦合松散,而且可以独立的改变他们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。

场景:我们来实现一个打招呼的小demo,由牛牛发送一条消息给中介者,中介者收到后通知risker发消息给牛牛

示例:

var Mediator = {
  Niuniu: null,
  Risker: null,
  showMessage: function(component, message){
    console.log(component.getName() + '说:' + message);
    if(component.getName() === 'Niuniu'){
      this.Risker.showMessage('hello Niuniu'); 
    }
  }
}
 
var Niuniu = function(){
  this.name = 'Niuniu';
  this.getName = function(){
    return this.name;
  }
  this.showMessage = function(message){
    Mediator.showMessage(this, message);
  }
}
 
var Risker = function(){
  this.name = 'Risker';
  this.getName = function(){
    return this.name;
  }
  this.showMessage = function(message){
    Mediator.showMessage(this, message);
  }
}
 
var niuniu = new Niuniu();
var risker = new Risker();
Mediator.niuniu = niuniu;
Mediator.Risker = risker;
 
niuniu.showMessage('hello Risker');
 
// Niuniu说:hello Risker
// Risker说:hello Niuniu

这个例子里面Niuniu和Risker称为同事对象,同事对象之间存在关联关系,既会被别的对象影响,也会影响别的对象。

Mediator称为中介者,其实中介者模式做的只是把之前网状的关系结构转化成了以Mediator为中心的星型结构。关联关系并没有少,只是在Mediator中集中处理了。

中介者模式总结:

优点:
* 中介者模式简化了同事对象之间的交互,它用中介者和同事的一对多交互代替了原来同事之间的多对多交互。
* 将各同事对象解耦,中介者有利于各同事对象之间的松耦合

缺点:
* 在中介者中包含了大量同事之间的交互细节,会导致中介者非常复杂难以维护。

适用场景:
* 系统中对象之间存在复杂的引用关系,系统结构混乱难以理解
* 一个对象由于引用了其他很多对象并且直接和这些对象通信,导致难以复用该对象

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
Js,alert出现乱码问题的解决方法
Jun 19 Javascript
JS格式化数字保留两位小数点示例代码
Oct 15 Javascript
JS实现文字链接感应鼠标淡入淡出改变颜色的方法
Feb 26 Javascript
vue 中自定义指令改变data中的值
Jun 02 Javascript
JavaScript之排序函数_动力节点Java学院整理
Jun 30 Javascript
H5基于iScroll实现下拉刷新和上拉加载更多
Jul 18 Javascript
JavaScript函数绑定用法实例分析
Nov 14 Javascript
Layui点击图片弹框预览的实现方法
Sep 16 Javascript
vue实现将一个数组内的相同数据进行合并
Nov 07 Javascript
vue ssr服务端渲染(小白解惑)
Nov 10 Javascript
vue 封装面包屑组件教程
Nov 16 Javascript
二维码条形码生成的JavaScript脚本库
Jul 07 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
Apr 20 #Javascript
JS实现横向跑马灯效果代码
Apr 20 #Javascript
vue2.x数组劫持原理的实现
Apr 19 #Javascript
vue2.x 对象劫持的原理实现
Apr 19 #Javascript
基于js判断浏览器是否支持webGL
Apr 18 #Javascript
JavaScript对象字面量和构造函数原理与用法详解
Apr 18 #Javascript
javascript 内存模型实例详解
Apr 18 #Javascript
You might like
php加水印的代码(支持半透明透明打水印,支持png透明背景)
2013/01/17 PHP
php中文语义分析实现方法示例
2019/09/28 PHP
jQuery 1.5最新版本的改进细节分析
2011/01/19 Javascript
div+css+js实现无缝滚动类似marquee无缝滚动兼容firefox
2013/08/29 Javascript
js函数模拟显示桌面.scf程序示例
2014/04/20 Javascript
jquery实现的导航固定效果
2014/04/28 Javascript
Jquery简单分页实现方法
2015/07/24 Javascript
JavaScript Length 属性的总结
2015/11/02 Javascript
javascript防篡改对象实例详解
2017/04/10 Javascript
解决Layui数据表格的宽高问题
2019/09/28 Javascript
JavaScript 严格模式(use strict)用法实例分析
2020/03/04 Javascript
基于javascript canvas实现五子棋游戏
2020/07/08 Javascript
通过实例了解Nodejs模块系统及require机制
2020/07/16 NodeJs
解决Ant Design Modal内嵌Form表单initialValue值不动态更新问题
2020/10/29 Javascript
nuxt.js写项目时增加错误提示页面操作
2020/11/05 Javascript
python通过邮件服务器端口发送邮件的方法
2015/04/30 Python
python实现颜色空间转换程序(Tkinter)
2015/12/31 Python
Python实现遍历目录的方法【测试可用】
2017/03/22 Python
python 获取毫秒数,计算调用时长的方法
2019/02/20 Python
详解Python正则表达式re模块
2019/03/19 Python
详解Python的三种可变参数
2019/05/08 Python
详解Python3中setuptools、Pip安装教程
2019/06/18 Python
Pandas中Series和DataFrame的索引实现
2019/06/27 Python
Python SSL证书验证问题解决方案
2020/01/13 Python
解决Python import .pyd 可能遇到路径的问题
2021/03/04 Python
探究 canvas 绘图中撤销(undo)功能的实现方式详解
2018/05/17 HTML / CSS
HTML5 video 事件应用示例
2014/09/11 HTML / CSS
HTML5的一个显示电池状态的API简介
2015/06/18 HTML / CSS
乌鸦喝水教学反思
2014/02/07 职场文书
开门红主持词
2014/04/02 职场文书
敬老月活动总结
2014/08/28 职场文书
2014物价局民主生活会对照检查材料思想汇报
2014/09/24 职场文书
Python数据分析之绘图和可视化详解
2021/06/02 Python
使用refresh_token实现无感刷新页面
2022/04/26 Javascript
解决Mysql中的innoDB幻读问题
2022/04/29 MySQL
彻底弄懂Python中的回调函数(callback)
2022/06/25 Python