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 跨域访问问题解决方法
Dec 02 Javascript
juqery 学习之六 CSS--css、位置、宽高
Feb 11 Javascript
Javascript 闭包引起的IE内存泄露分析
May 23 Javascript
深入理解JavaScript系列(17):面向对象编程之概论详细介绍
Mar 04 Javascript
js中for in语句的用法讲解
Apr 24 Javascript
10个很棒的jQuery代码片段
Sep 24 Javascript
JS组件Bootstrap Table表格行拖拽效果实现代码
Aug 27 Javascript
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
Feb 25 Javascript
JS实现间歇滚动的运动效果实例
Dec 22 Javascript
Vue.js实现移动端短信验证码功能
Mar 29 Javascript
VsCode插件整理(小结)
Sep 14 Javascript
vue-cli3访问public文件夹静态资源报错的解决方式
Sep 02 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下pdo的mysql事务处理用法实例
2014/12/27 PHP
thinkPHP5.0框架开发规范简介
2017/03/25 PHP
浅谈PHP表单提交(POST&GET&URL编/解码)
2017/04/03 PHP
PhpStorm配置Xdebug调试的方法步骤
2019/02/02 PHP
javaScript 数值型和字符串型之间的转换
2009/07/25 Javascript
javascript 函数调用规则
2009/08/26 Javascript
轻量级 JS ToolTip提示效果
2010/07/20 Javascript
Node.js中使用socket创建私聊和公聊聊天室
2015/11/19 Javascript
jQuery position() 函数详解以及jQuery中position函数的应用
2015/12/14 Javascript
JS深度拷贝Object Array实例分析
2016/03/31 Javascript
JavaScript函数参数的传递方式详解
2017/03/06 Javascript
angularJS开发注意事项
2018/05/26 Javascript
详解json串反转义(消除反斜杠)
2019/08/12 Javascript
jquery分页优化操作实例分析
2019/08/23 jQuery
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
2021/02/20 Vue.js
[14:25]教你分分钟做大人:主宰(HEROS)
2014/12/08 DOTA
[50:48]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python中的rjust()方法使用详解
2015/05/19 Python
Python通过poll实现异步IO的方法
2015/06/04 Python
Python实现的计算器功能示例
2018/04/26 Python
Python3实现的Mysql数据库操作封装类
2018/06/06 Python
Python3.5面向对象程序设计之类的继承和多态详解
2019/04/24 Python
win10安装tensorflow-gpu1.8.0详细完整步骤
2020/01/20 Python
python右对齐的实例方法
2020/07/05 Python
世界上最大的铁人三项商店:Tri UK
2020/11/04 全球购物
动态密码技术
2012/10/18 面试题
大学生求职推荐信
2013/11/27 职场文书
大学生饮食配送创业计划书
2014/01/04 职场文书
小学生安全保证书
2014/02/01 职场文书
行政部工作岗位职责范本
2014/03/05 职场文书
人事任命书怎么写
2014/06/05 职场文书
经济贸易专业自荐信
2014/06/11 职场文书
销售开票员岗位职责
2015/04/15 职场文书
超强台风观后感
2015/06/09 职场文书
Python Pandas pandas.read_sql_query函数实例用法分析
2021/06/21 Python
python多次执行绘制条形图
2022/04/20 Python