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 相关文章推荐
打开超链需要“确认”对话框的方法
Mar 08 Javascript
javascript实现的鼠标链接提示效果生成器代码
Jun 28 Javascript
动态样式类封装JS代码
Sep 02 Javascript
jQuery学习笔记 获取jQuery对象
Sep 19 Javascript
JS不间断向上滚动效果代码
Dec 25 Javascript
Javascript 数组去重的方法(四种)详解及实例代码
Nov 24 Javascript
jquery对象与DOM对象转化
Feb 08 Javascript
防止重复发送 Ajax 请求
Feb 15 Javascript
node.js学习之断言assert的使用示例
Sep 28 Javascript
vue 循环加载数据并获取第一条记录的方法
Sep 26 Javascript
JavaScript类的继承操作实例总结
Dec 20 Javascript
微信小程序中button去除默认的边框实例代码
Aug 01 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之第六天
2006/10/09 PHP
php微信公众平台开发类实例
2015/04/01 PHP
List Installed Hot Fixes
2007/06/12 Javascript
js iframe跨域访问(同主域/非同主域)分别深入介绍
2013/01/24 Javascript
jquery选择符快速提取web表单数据示例
2014/03/27 Javascript
node.js中的fs.closeSync方法使用说明
2014/12/17 Javascript
jQuery实现dialog设置focus焦点的方法
2015/06/10 Javascript
正则表达式优化JSON字符串的技巧
2015/12/24 Javascript
关于function类中定义变量this的简单说明
2016/05/28 Javascript
利用Bootstrap实现表格复选框checkbox全选
2016/12/21 Javascript
使用jquery datatable和bootsrap创建表格实例代码
2017/03/17 Javascript
AngularJs每天学习之总体介绍
2017/08/07 Javascript
原生js实现拖拽功能基本思路详解
2018/04/18 Javascript
mpvue+vuex搭建小程序详细教程(完整步骤)
2018/09/30 Javascript
JavaScript模板引擎应用场景及实现原理详解
2018/12/14 Javascript
详解wepy开发小程序踩过的坑(小结)
2019/05/22 Javascript
js判断浏览器的环境(pc端,移动端,还是微信浏览器)
2020/12/24 Javascript
JS数组方法concat()用法实例分析
2020/01/18 Javascript
python 实现堆排序算法代码
2012/06/05 Python
python打开网页和暂停实例
2014/09/30 Python
django settings.py 配置文件及介绍
2019/07/15 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
sklearn的predict_proba使用说明
2020/06/28 Python
python selenium xpath定位操作
2020/09/01 Python
HTML5跳转小程序wx-open-launch-weapp的示例代码
2020/07/16 HTML / CSS
美国餐厅用品和厨房设备批发网站:KaTom Restaurant Supply
2018/01/27 全球购物
湖南卫视在线视频媒体平台:芒果TV
2019/10/30 全球购物
linux面试题参考答案(2)
2015/12/06 面试题
大四自我鉴定范文
2013/10/06 职场文书
和平主题的演讲稿
2014/01/12 职场文书
省优秀教师事迹材料
2014/01/30 职场文书
入职担保书怎么写
2014/05/12 职场文书
2014年学校领导班子对照检查材料
2014/09/19 职场文书
2015年保管员工作总结
2015/04/30 职场文书
2015年医院后勤工作总结
2015/05/20 职场文书
推广普通话主题班会
2015/08/17 职场文书