* player.jsjavascript
/** * 中介者模式 * @param {*} name 角色名稱 * @param {*} teamColor 隊伍顏色 */ function Player(name, teamColor) { this.name = name; this.teamColor = teamColor; this.state = "alive"; // 玩家生存狀態 } Player.prototype.win = function() { console.log(this.name + " won"); } Player.prototype.lose = function() { console.log(this.name + " lost"); } Player.prototype.die = function() { this.state = "dead"; // 給中介者發消息 玩家死亡 playerDirector.ReceiveMessage('playerDead', this); } Player.prototype.remove = function() { // 給中介者發消息 玩家掉線 playerDirector.ReceiveMessage('removePlayer', this); } Player.prototype.changeTeam = function(color) { // 給中介者發消息 玩家換隊 playerDirector.ReceiveMessage('changeTeam', this, color); } var playerFactory = function(name, teamColor) { // 創造一個新的玩家對象 var newPlayer = new Player(name, teamColor); // 給中介者發送消息, 玩家換隊 playerDirector.ReceiveMessage('addPlayer', newPlayer); return newPlayer; } // 中介者對象 var playerDirector = (function() { var players = {}, // 保存全部玩家 operations = {}; // 中介者能夠執行的操做 /************ 新增一個玩家 **************/ operations.addPlayer = function(player) { // 玩家的隊伍顏色 var teamColor = player.teamColor; // 若是該顏色的玩家尚未成立隊伍, 則新成立一個隊伍 players[teamColor] = players[teamColor] || []; players[teamColor].push(player); // 添加玩家進隊伍 } /********** 移除一個玩家 ***************/ operations.removePlayer = function(player) { var teamColor = player.teamColor, teamPlayers = players[teamColor] || []; // 遍歷刪除 for (var i = teamPlayers.length-1; i >= 0; i--) { if (teamPlayers[i] === player) { teamPlayers.splice(i, 1); break; } } } /************* 玩家換隊 ******************/ operations.changeTeam = function(player, newTeamColor) { operations.removePlayer(player); // 從原隊伍中刪除 player.teamColor = newTeamColor; // 改變隊伍顏色 operations.addPlayer(player); // 添加到新隊伍中 } /************* 玩家死亡 ****************/ operations.playerDead = function(player) { var teamColor = player.teamColor, teamPlayers = players[teamColor]; var all_dead = true; for (var i = 0, player; player = teamPlayers[i]; i++) { if (player.state !== 'dead') { all_dead = false; break; } } if (all_dead) { teamPlayers.forEach(function(player) { player.lose(); }); for (var color in players) { if (color !== teamColor) { players[color].forEach(function(player) { player.win(); }); } } } } var ReceiveMessage = function() { var message = Array.prototype.shift.call(arguments); operations[message].apply(this, arguments); } return { ReceiveMessage: ReceiveMessage } })(); var player1 = playerFactory('皮蛋', 'red'), player2 = playerFactory('小怪', 'red'), player3 = playerFactory('寶寶', 'red'), player4 = playerFactory('小強', 'red'); var player5 = playerFactory('黑妞', 'blue'), player6 = playerFactory('蔥頭', 'blue'), player7 = playerFactory('胖墩', 'blue'), player8 = playerFactory('海盜', 'blue'); // player1.die(); player2.die(); player3.die(); player4.die(); // player1.remove(); player2.remove(); player3.die(); player4.die(); player1.changeTeam('blue'); player2.die(); player3.die(); player4.die();
Run:java
VM394:17 小怪 lost VM394:17 寶寶 lost VM394:17 小強 lost VM394:13 黑妞 won VM394:13 蔥頭 won VM394:13 胖墩 won VM394:13 海盜 won VM394:13 皮蛋 won
* 購物車bash