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 相关文章推荐
网页防止tab键的使用快速解决方法
Nov 07 Javascript
在javascript中实现函数数组的方法
Dec 25 Javascript
jQuery中的val()示例应用
Feb 26 Javascript
JS中的构造函数详细解析
Mar 10 Javascript
基于JavaScript实现鼠标箭头移动图片跟着移动
Aug 30 Javascript
js实现刷新页面后回到记录时滚动条的位置【两种方案可选】
Dec 12 Javascript
javascript中apply/call和bind的使用
Feb 15 Javascript
JS中使用media实现响应式布局
Aug 04 Javascript
jQuery实现获取选中复选框的值实例详解
Jun 28 jQuery
angular6的table组件开发的实现示例
Dec 26 Javascript
详解微信小程序自定义组件的实现及数据交互
Jul 22 Javascript
openlayers实现图标拖动获取坐标
Sep 25 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编写PDF文档生成器
2006/10/09 PHP
php中Ioc(控制反转)和Di(依赖注入)
2017/05/07 PHP
YII2框架中日志的配置与使用方法实例分析
2020/03/18 PHP
document.all与WEB标准
2020/05/13 Javascript
JavaScript实现点击按钮后变灰避免多次重复提交
2013/07/15 Javascript
javascript 用函数语句和表达式定义函数的区别详解
2014/01/06 Javascript
js函数模拟显示桌面.scf程序示例
2014/04/20 Javascript
详解JS函数重载
2014/12/04 Javascript
AngularJS入门教程(一):静态模板
2014/12/06 Javascript
javascript+HTML5的Canvas实现Lab单车动画效果
2015/08/07 Javascript
在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
2017/09/19 NodeJs
浅谈VUE监听窗口变化事件的问题
2018/02/24 Javascript
用node开发并发布一个cli工具的方法步骤
2019/01/03 Javascript
setTimeout与setInterval的区别浅析
2019/03/23 Javascript
使用layui+ajax实现简单的菜单权限管理及排序的方法
2019/09/10 Javascript
vue视频播放插件vue-video-player的具体使用方法
2019/11/08 Javascript
vue计算属性+vue中class与style绑定(推荐)
2020/03/30 Javascript
JavaScript常用工具函数库汇总
2020/09/17 Javascript
简单的抓取淘宝图片的Python爬虫
2014/12/25 Python
Python中for循环控制语句用法实例
2015/06/02 Python
Python 多线程实例详解
2017/03/25 Python
Python查找两个有序列表中位数的方法【基于归并算法】
2018/04/20 Python
Python3中的json模块使用详解
2018/05/05 Python
python如何获取列表中每个元素的下标位置
2019/07/01 Python
Python实现决策树并且使用Graphviz可视化的例子
2019/08/09 Python
Python通过format函数格式化显示值
2020/10/17 Python
python 获取剪切板内容的两种方法
2020/11/28 Python
使用pandas读取表格数据并进行单行数据拼接的详细教程
2021/03/03 Python
ghd澳大利亚官方网站:英国最受欢迎的美发工具品牌
2018/05/21 全球购物
甜品店的创业计划书范文
2014/01/02 职场文书
大学生军训广播稿
2014/01/24 职场文书
基于go interface{}==nil 的几种坑及原理分析
2021/04/24 Golang
MySQL 使用自定义变量进行查询优化
2021/05/14 MySQL
MySQL如何使用使用Xtrabackup进行备份和恢复
2021/06/21 MySQL
Windows Server 2008 修改远程登录端口以及配置防火墙
2022/04/28 Servers
Win11如何查看显卡型号 Win11查看显卡型号的方法
2022/08/14 数码科技