/*
* 小游戏演示中介者模式
* Home 按键 1
* Guest 按键 0
* 半分钟内看谁按下的次数多
*
* 参与的对象:
* 玩家
* 计分板
* 中介者
*
* 中介者模式使对象之间松耦合,提高了可维护性
*/
// 玩家
var Player = function (name) {
this.name = name;
this.point = 0;
};
Player.prototype.play = function () {
this.point += 1;
mediator.played(); // 每次玩家按键,中介者更新计分板
};
// 计分板
var scoreboard = {
element: document.getElementById("result"), // 记录比分
update: function (score) {
var msg = "",
i;
for (i in score) {
if (score.hasOwnProperty(i)) {
msg += '<p><strong>' + i + '</strong>: ' + score[i] + '</p>';
}
}
this.element.innerHTML = msg;
}
};
// 计分人(中介者)
var mediator = {
// 所有的玩家(player 对象)
players: {},
// 玩家就位
setup: function () {
var players = this.players;
players.home = new Player("Home");
players.guest = new Player("Guest");
},
// 计分
played: function () {
var players = this.players,
score = {
Home: players.home.point,
Guest: players.guest.point
};
scoreboard.update(score);
},
// 游戏开始
keypress: function (e) {
e = e || window.event;
if (e.which === 49) { // 按键1
mediator.players.home.play();
return;
}
if (e.which === 48) {
mediator.players.guest.play();
return;
}
}
};
// 运行游戏
mediator.setup();
window.onkeypress = mediator.keypress;
// 游戏在30秒内结束
setTimeout(function () {
window.onkeypress = null;
alert("Game Over!");
}, 30000);