JS——Mediator(中介者)模式

14.设计模式--中介者模式(Mediator模式) 1.定义 大猫的Java笔记 一个正在努力学习的Java开发,分享自己的学习笔记 44篇原创内容 阅读详情

我们从日常的生活中打个简单的比方,我们去房屋中介租房,房屋中介人在租房者和房东出租者之间形成一条中介。租房者并不关心他租谁的房。房东出租者也不关心他租给谁。因为有中介的存在,这场交易才变得如此方便。

在软件的开发过程中,势必会碰到这样一种情况,多个类或多个子系统相互交互,而且交互很繁琐,导致每个类都必须知道他需要交互的类,这样它们的耦合会显得异常厉害。牵一发而动全身,后果很严重。

模式图:

中介者的功能就是封装对象之间的交互。如果一个对象的操作会引起其他相关对象的变化,而这个对象又不希望自己来处理这些关系,那么就可以去找中介者,让它来处理这些麻烦的关系。
给个有趣的小例子吧:
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<p>1 0 30</p>
	<div id="results"></div>
	<script>
		//Mediator
		//这里用了构造器模式
		function Player(name) {
			this.name = name;
			this.point = 0;
		}
		Player.prototype.play = function() {
			this.point += 1;
			mediator.played();
		}

		var scoreboard = {
			ele : document.getElementById("results"),

			update : function(score) {
				var i, msg = "";
				for(i in score) {
					if(score.hasOwnProperty(i)) {
						msg += "<p><strong>" + i + "</strong>";
						msg += score[i];
						msg += "</p>";
					}
				}
				this.ele.innerHTML = msg;
			}
		};

		var mediator = {

			players : {},

			setup : function() {

				var player = this.players;
				player.home = new Player("Home");
				player.guest = new Player("Guest");
			},

			played : function() {

				var player = this.players;
				score = {
					Home : player.home.point,
					Guest : player.guest.point
				};
				scoreboard.update(score);
			},

			keypress : function(e) {
				e = e || window.event;    //事件监听
				if(e.which === 49) {
					mediator.players.home.play();
				}
				if(e.which === 48) {
					mediator.players.guest.play();
				}
			}
		};

		mediator.setup();
		window.onkeypress = mediator.keypress;

		setTimeout(function(){
			window.onkeypress = null;
			console.log("game over!");
		}, 30000);
	</script>
</body>
</html>
这里的Players(玩家)与scoreboard(计分板)之间交互都通过中介者,降低了耦合,而且增强了代码的可读性。

四,总结一下

Why Mediator ?

各个对象之间的交互操作非常多,每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉及到修改很多其他对象的行为,

如果使用Mediator模式,可以使各个对象间的耦合松散,只需关心和 Mediator的关系,使多对多的关系变成了一对多的关系,

可以降低系统的复杂性,提高可修改扩展性。

使用中介者模式的场合

1.一组定义良好的对象,现在要进行复杂的通信。

2.定制一个分布在多个类中的行为,而又不想生成太多的子类。

可以看出,中介对象主要是用来封装行为的,行为的参与者就是那些对象,但是通过中介者,这些对象不用相互知道。(迪米特法则的具体实现)

使用中介者模式的优点:

1.降低了系统对象之间的耦合性,使得对象易于独立的被复用。

2.提高系统的灵活性,使得系统易于扩展和维护。

使用中介者模式的缺点:

中介者模式的缺点是显而易见的,因为这个“中介“承担了较多的责任,所以一旦这个中介对象出现了问题,那么整个系统就会受到重大的影响。


摘录于:

1、http://www.cnblogs.com/bigbearbb/p/4193020.html
2、http://jsfiddle.net/ganksolo/jveA4/
3、《Javascript设计模式》



javascript设计模式之中介者模式Mediator 主要介绍了javascript设计模式之中介者模式Mediator,需要的朋友可以参考下 立即下载

相关推荐

量化策略分享之首板低开

这个量化策略的核心是选择在低位、首次涨停后次日低开的股票,开盘时买入,上午有盈利就卖出,没有就拿到尾盘在卖出;策略优点在于选择的股票在低位,风险较低,并且刚启动首板,有大资金介入,第二天能快速跑路。

qq_29301281的博客 1469

JavaScript中的中介者模式

在上面的示例中,`Mediator`类是中介者对象,`Colleague`类是同事对象。需要注意的是,在中介者模式中,同事对象并不直接相互引用,而是通过中介者对象进行通信,这样可以使得对象之间的耦合度降低,从而使得代码更加灵活、易于维护和扩展。在中介者模式中,所有的对象都是同等的,没有谁是主导者,也没有谁是被动者,它们只是通过一个中介者来进行交互。- 具体同事对象(Concrete Colleague):实现同事接口,每个同事对象都会与其他同事对象交互,但是只与中介者对象交互。1. 中介者模式的定义。

m0_75198698的博客 312

STM32CubeMX HAL实战:JY901S串口数据解析与姿态解算

本文详细介绍了如何使用STM32CubeMX HAL库实现JY901S六轴姿态传感器的串口数据解析与姿态解算。从基础硬件连接到USART3配置,再到数据接收状态机实现和传感器校准方法,最后深入讲解互补滤波与Mahony滤波算法在姿态解算中的应用。通过实战代码演示,帮助开发者快速掌握无人机、机器人等项目中关键姿态数据处理技术。

weixin_28703489的博客 432

js设计模式【详解】—— 中介者模式

目录 中介者模式的定义 中介者模式和观察者模式的区别 中介者模式和外观模式的区别 演示范例——中介者模式 中介者模式的定义 中介者模式(Mediator):用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 类型:行为模式 用途:解除对象与对象之间的紧耦合关系 现实中的中介者模式:机场指挥塔就是中介者,它控制着飞机的起飞和降落,因为所有的沟通都是从飞机向塔台汇报来完成的,而不是飞机之前相互沟通。 使用场景:如

朝阳39的博客 1008

ArcGIS基础:CAD数据转换为GIS数据(符号化显示、数据转换、线转面、空间连接)

1、符号化显示: CAD数据加载进来有很多列表,包含了点【point】、线【polyline】、面【polygon】、标注数据【Annotation】等数据,本次实验我们需要用到的是面数据,也就是.dwgPolygong格式的数据。如下图所示: 把数据加载进来,然后在2处打开属性表,查看CAD数据的属性表,打开后可以发现【layer】图层表示就是地块的用地性质,它就是符号化显示的依据。 我们在数据上右键【属性】,打开图层属性,找到【符号系统】,选择类别中的【唯一值】,然后在【值字段】下拉选择【layer】,

yuanYW7556的博客 2万+

Obsidian的Git插件设置配置全流程 -- 简单的电脑端多平台同步方案及常见问题

Git同步obsidian的保姆级教程和常见问题

weixin_44370439的博客 1万+

设计模式——Mediator(中介者)模式

目录前言1 定义2 适用性3 结构3.1 结构图3.2 参与者4 应用举例——以房产中介为例4.1 Mediator——HouseMediator4.2 具体Mediator——BeijingHouseMediato4.3 Colleague4.4 具体Colleague——ConcreteColleagueOne、ConcreteColleagueTwo5 总结参考文献 前言 将一个系统分割为多个对象可以增强复用性,但是对象之间相互连接又会降低复用性。如果使用一个中介对象来改变这总交互关系将增强系统健壮性

qq_36566262的博客 1214

减小伺服电机共振的方法(以松下伺服为例)

嘿 ! 我是【小黄】 , 我们又见面啦 !!! 毕竟技术只有大家交流才会进步嘛 ! 这博客是对自己学习的一点点记录和总结 ,如果您对自动控制感兴趣的话 ,可以关注一下我的动态 , 我们一起学习呀 ! 我们都还年轻 ,我们还有无限可能 。 YES ! 减小伺服电机共振的方法(以松下伺服为例)1. 准备工作:1.1.1 如何推定共振点:1.1.2 测定实操:1.1.3 总结:2. 下期预告: 在我们调试完伺服参数以后机器人运动到某个特定位置会产生振动或异响,我们要做的就是消除这个异响保..

在下小黄的博客 1万+

Javascript中介者模式

Javascript中介者模式 1 什么是中介者模式 2 示例:泡泡堂游戏 2.1 增加游戏人数 2.2 问题 2.3 用中介者模式改造泡泡堂游戏 3 示例:购买商品 3.1 问题 3.2 引入中介者

橘猫吃不胖的博客 1202

用VSCode远程开发Jetson小车:告别Jupyter,在本地IDE高效调试Rosmaster Python程序

本文详细介绍了如何利用VSCode的Remote-SSH扩展在本地IDE中高效开发Jetson小车的Rosmaster Python程序。通过配置远程开发环境、调试技巧和项目管理方法,开发者可以告别Jupyter Notebook的碎片化编码,实现完整的机器人控制程序开发,显著提升工作效率。

weixin_30652491的博客 477

通过情感分类实例 详细介绍如果借助Huggingface平台 完成Transformers模型运行(包括配置环境-tokenizer-Model-输出头-预测)

attention_mask和padding是配套使用的,当人为去修改padding的时候,也要把attention_mask里面的参数进行修改。下载Huggingface包,Huggingface可以说是一个社区,集成了很多nlp的模型、数据集、预训练权重文件等等,并且免费,只需要pip install下载即可。那么用什么做分类就选择什么输出头,就import什么东西。代码中使用了自动分词器选择,它是由checkpoint指定的预训练模型关联的,不用我们自己选择tokenizer,它自动帮我们选择好了。

LZL2020LZL的博客 1137

Mediator.js 项目推荐

Mediator.js 项目推荐 项目基础介绍和主要编程语言 Mediator.js 是一个用于 JavaScript 的轻量级实用类,旨在帮助实现中介者模式,以便于事件驱动的异步编程。该项目的主要编程语言是 JavaScript,适用于 Node.js 环境和浏览器环境。 项目核心功能 Mediator.js 的核心功能包括: 事件注册与注销:允许开发者注册和注销事件监听器,以便在特定事件发生...

gitblog_00778的博客 705

RISC-V CPU设计(三)---多周期CPU的设计与实现

基本情况 本多周期CPU支持RV32I指令集(fence,ecall,ebreak除外),已通过部分指令的测试,如代码有bug,欢迎指出。 模块划分 代码将CPU划分为以下几个模块: 1.控制单元:ControlUnit 用于产生控制信号,是CPU的大脑,指挥中枢。 2.分支决策单元:BranchUnit 用于决定B型指令是否发生跳转 3.立即数单元:ImmUnit 用于从指令中解析出立即数. 4.寄存器堆:RegisterFile RISC-V的32个寄存器,其中x0寄存器恒为0,不可更改。 5.指令存储

qq_40268672的博客 5542

探索Mediator.js:简化异步编程的轻量级工具

探索Mediator.js:简化异步编程的轻量级工具 在现代Web开发中,异步编程是不可或缺的一部分。无论是处理WebSocket回调、Ajax请求还是DOM事件,一个高效的事件管理机制都是至关重要的。今天,我们将深入探讨一个轻量级的JavaScript库——Mediator.js,它通过实现中介者模式,为异步编程提供了一个简洁而强大的解决方案。 项目介绍 Mediator.js是一个轻量级的实用...

gitblog_00527的博客 357

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

javascript设计模式之Mediator(中介者)模式

javascript设计模式之Mediator(中介者)模式关于设计模式 设计模式是起源于建筑学, 某些情况下理论与实践的结合才是最好的, 从实践中不断地总结然后形成一个知识体系,为我们后面学习的人提供了很好的思路和解决方案, 同时我们也可以少走很多弯路,我们下面就来看常用设计模式中的一种--------中介者设计模式, 这只是学习过程中的一个记录,欢迎大神指点微笑 一、什么是中介者模式

qq_20291283的博客 660

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

JAVA SCRIPT设计模式--行为型--设计模式之Mediator中介者模式(17)

CreateWidgets是创建一个对话框的窗口组件的抽象操作。不同的对话框会有不同的窗口组件间的依赖关系。大量的相互连接使得一个对象似乎不太可能在没有其他对象的支持下工作 —系统表现为一个不可分割的整体。而且 ,对系统的行为进行任何较大的改动都十分困难, 因为行为被分布在许多对象中。例如,FontDialogDirector可作为一个对话框中的窗口组件间的中介者。FontDialogDirector对象知道对话框中的各窗口组件,并协调它们之间的交互。在最坏的情况下,每一个对象都知道其他所有对象。

火柴盒 459

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

javascript设计模式-中介者模式(mediator pattern)

为什么80%的码农都做不了架构师?>>> ...

weixin_33701294的博客 135

javascript 设计模式-中介者模式 mediator (1)

* player.js /** * 中介者模式 * @param {*} name 角色名称 * @param {*} teamColor 队伍颜色 */ function Player(name, teamColor) { this.name = name; this.teamColor = teamColor; this.state = "alive";...

fareast_mzh的博客 344

《JavaScript设计模式》——9.6 Mediator(中介者)模式

本节书摘来自异步社区《JavaScript设计模式》一书中的第9章,第9.6节, 作者: 【美】Addy Osmani 译者: 徐涛 更多章节内容可以访问云栖社区“异步社区”公众号查看。 9.6 Mediator(中介者)模式 在字典里,中介者是指“协助谈判和解决冲突的中立方”1。在本书设计模式里,中介者是一种行为设计模式,它允许我们公开一个统一的接口,...

weixin_33913332的博客 202

javascript 设计模式-中介者模式 mediator (2) 购物车

* index.html &lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;shopping cart&lt;/title&gt; &lt;link rel="stylesheet

fareast_mzh的博客 450

javascript设计模式--中介者模式(Mediator)

1 <!doctype html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>中介者模式</title> 6 </head> 7 <body> 8...

weixin_30421525的博客 77

javascript 中mediator pattern(中介者模式)一个实例demo

<!doctype html> <html lang="en"> <head> <title>JavaScript Patterns</title> <meta charset="utf-8"> </head> <body> <div id="results"&g...

weixin_30745641的博客 70

大熊君说说JS与设计模式之------中介者模式Mediator

一,总体概要 1,笔者浅谈 我们从日常的生活中打个简单的比方,我们去房屋中介租房,房屋中介人在租房者和房东出租者之间形成一条中介。租房者并不关心他租谁的房。房东出租者也不关心他租给谁。因为有中介的存在,这场交易才变得如此方便。 在软件的开发过程中,势必会碰到这样一种情况,多个类或多个子系统相互交互,而且交互很繁琐,导致每个类都必须知道他需要交互的类,这样它们的耦合会显得异常厉害。牵一发而动全...

weixin_30898109的博客 95

如何区分javascript设计模式中的中介者模式(Mediator Pattern)与观察者模式(Observer Pattern)?

首先聊聊观察者模式(Observer Pattern),这个非常好理解 在GoF的原文中是这样描述观察者模式的: One or more observers are interested in the state of a subject and register their interest with the subject by attaching themselves. When s

Whisper_a的专栏 646
上一篇: JS——Constructor(构造器)模式
下一篇: 设计模式原则
spfLinux
博客等级 码龄10年 117粉丝 307原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值