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 相关文章推荐
jQuery 菜单随滚条改为以定位方式(固定要浏览器顶部)
May 24 Javascript
js树插件zTree获取所有选中节点数据的方法
Jan 28 Javascript
如何理解jQuery中的ajaxSubmit方法
Mar 13 Javascript
js推箱子小游戏步骤代码解析
Jan 10 Javascript
JS实现的邮箱提示补全效果示例
Jan 30 Javascript
setTimeout时间设置为0详细解析
Mar 13 Javascript
微信小程序使用map组件实现路线规划功能示例
Jan 22 Javascript
详解javascript replace高级用法
Feb 17 Javascript
JavaScript 性能提升之路(推荐)
Apr 10 Javascript
vue实现吸顶、锚点和滚动高亮按钮效果
Oct 21 Javascript
JS基础之逻辑结构与循环操作示例
Jan 19 Javascript
vue学习笔记之作用域插槽实例分析
Feb 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
Terran兵种介绍
2020/03/14 星际争霸
新安装的MySQL数据库需要注意的安全知识
2008/07/30 PHP
《PHP编程最快明白》第六讲:Mysql数据库操作
2010/11/01 PHP
ThinkPHP权限认证Auth实例详解
2014/07/22 PHP
破解Session cookie的方法
2006/07/28 Javascript
页面中js执行顺序
2009/11/09 Javascript
js 文件引入实现代码
2010/04/23 Javascript
用Javascript评估用户输入密码的强度实现代码
2011/11/30 Javascript
如何用js控制frame的隐藏或显示的解决办法
2013/03/20 Javascript
jQuery实现的五子棋游戏实例
2015/06/13 Javascript
jquery带动画效果幻灯片特效代码
2015/08/27 Javascript
js获取及判断键盘按键的方法
2015/12/01 Javascript
javascript检测flash插件是否被禁用的方法
2016/01/14 Javascript
详谈js中数组(array)和对象(object)的区别
2017/02/27 Javascript
Vue.js实现多条件筛选、搜索、排序及分页的表格功能
2020/11/24 Javascript
详解webpack+gulp实现自动构建部署
2017/06/29 Javascript
原生JS实现隐藏显示图片 JS实现点击切换图片效果
2021/01/27 Javascript
使用layer弹窗提交表单时判断表单是否输入为空的例子
2019/09/26 Javascript
vue把输入框的内容添加到页面的实例讲解
2019/11/11 Javascript
[43:53]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.22
2019/09/05 DOTA
[01:35:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第一场 1月18日
2021/03/11 DOTA
python修改list中所有元素类型的三种方法
2018/04/09 Python
Django跨域请求CSRF的方法示例
2018/11/11 Python
Python图像处理之图片文字识别功能(OCR)
2019/07/30 Python
10行Python代码计算汽车数量的实现方法
2019/10/23 Python
Python如何将装饰器定义为类
2020/07/30 Python
英国知名的皮手套品牌:Dents
2016/11/13 全球购物
中东地区为妈妈们提供一切的头号购物目的地:Sprii
2018/05/06 全球购物
阿玛尼美妆英国官网:Giorgio Armani Beauty英国
2019/03/28 全球购物
酒店应聘自荐信
2013/11/09 职场文书
开展党的群众路线教育实践活动方案
2014/02/05 职场文书
党员党性分析材料
2014/02/17 职场文书
出纳员的岗位职责
2014/02/22 职场文书
2015年度电厂个人工作总结
2015/05/13 职场文书
先进工作者主要事迹材料
2015/11/03 职场文书
十个Python自动化常用操作,即拿即用
2021/05/10 Python