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 获取json数据实现代码
Apr 27 Javascript
jquery 查找新建元素代码
Jul 06 Javascript
javascript中String类的subString()方法和slice()方法
May 24 Javascript
ExtJS实现文件下载的方法实例
Nov 09 Javascript
node.js中的fs.fsync方法使用说明
Dec 15 Javascript
jQuery实现控制文字内容溢出用省略号(…)表示的方法
Feb 26 Javascript
bootstrap栅格系统示例代码分享
May 22 Javascript
使用javaScript实现鼠标拖拽事件
Apr 03 Javascript
Angular4编程之表单响应功能示例
Dec 13 Javascript
小程序从手动埋点到自动埋点的实现方法
Jan 24 Javascript
Vue 使用Props属性实现父子组件的动态传值详解
Nov 13 Javascript
mpvue实现微信小程序快递单号查询代码
Apr 03 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-fpm的配置详解
2013/06/03 PHP
详解WordPress开发中的get_post与get_posts函数使用
2016/01/04 PHP
特殊字符、常规符号及其代码对照表
2006/06/26 Javascript
收集的一些Array及String原型对象的扩展实现代码
2010/12/05 Javascript
jquery.blockUI.js上传滚动等待效果实现思路及代码
2013/03/18 Javascript
javascript强大的日期函数代码分享
2013/09/04 Javascript
js动态改变select选择变更option的index值示例
2014/07/10 Javascript
基于Css3和JQuery实现打字机效果
2015/08/11 Javascript
Bootstrap每天必学之前端开发框架
2015/11/19 Javascript
jQuery+css3实现转动的正方形效果(附demo源码下载)
2016/01/27 Javascript
Bootstrap 最常用的JS插件系列总结(图片轮播、标签切换等)
2016/07/14 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
2017/04/24 Javascript
JavaScript 巧学巧用
2017/05/23 Javascript
Node.Js生成比特币地址代码解析
2018/04/21 Javascript
详解小程序输入框闪烁及重影BUG解决方案
2018/08/31 Javascript
Javascript删除数组里的某个元素
2019/02/28 Javascript
浅析vue中的MVVM实现原理
2019/03/04 Javascript
JavaScript中的函数式编程详解
2020/08/22 Javascript
vue表单验证之禁止input输入框输入空格
2020/12/03 Vue.js
[07:20]2014DOTA2西雅图国际邀请赛 选手讲解积分赛第二天
2014/07/11 DOTA
python中实现定制类的特殊方法总结
2014/09/28 Python
Python的re模块正则表达式操作
2016/05/25 Python
30秒轻松实现TensorFlow物体检测
2018/03/14 Python
解决python xlrd无法读取excel文件的问题
2018/12/25 Python
Django 外键的使用方法详解
2019/07/19 Python
Madewell澳大利亚官方网站:美国休闲服饰品牌
2019/07/18 全球购物
说出数据连接池的工作机制是什么?
2013/04/19 面试题
大学生自我评价怎样写好
2013/10/23 职场文书
文化宣传方案
2014/03/13 职场文书
《爱如茉莉》教后反思
2014/04/12 职场文书
详细的本科生职业生涯规划范文
2014/09/16 职场文书
2014年“世界无车日”活动方案
2014/09/21 职场文书
植物园观后感
2015/06/11 职场文书
餐厅营销的秘密:为什么老顾客会流水?
2019/08/08 职场文书
Python标准库之typing的用法(类型标注)
2021/06/02 Python
关于SpringBoot 使用 Redis 分布式锁解决并发问题
2021/11/17 Redis