JS——Mediator(中介者)模式

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

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

模式图:

中介者的功能就是封装对象之间的交互。如果一个对象的操作会引起其他相关对象的变化,而这个对象又不希望自己来处理这些关系,那么就可以去找中介者,让它来处理这些麻烦的关系。
给个有趣的小例子吧:
<!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设计模式》



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值