SOURCE

console 命令行工具 X clear

                    
>
console
// // 属性
// function Player(name, teamColor) {
//     this.partners = []; // 队友列表 
//     this.enemies = []; // 敌人列表 
//     this.state = 'live'; // 玩家状态 
//     this.name = name; // 角色名字 
//     this.teamColor = teamColor; // 队伍颜色
// }

// 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.reciveMessage('playerDead', this) // 通知中介者
// }

// Player.prototype.remove = function () {
//     playerDirector.reciveMessage('removePlayer', this) // 通知中介者
// }

// // 换队
// Player.prototype.changeTeam = function (color) {
//     playerDirector.reciveMessage('changeTeam', this, color) // 通知中介者
// }

// // 工厂生产玩家
// var players = []
// var playerFactory = function (name, teamColor) {
//     var newPlayer = new Player(name, teamColor)
//     playerDirector.reciveMessage('addPlayer', newPlayer) // 通知中介者
//     return newPlayer;
// }


// // 中介者
// var playerDirector = (function () {
//     var players = {} // 保存所有玩家
//     var 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 // 玩家队伍颜色
//         var teamPlayers = players[teamColor] || [] // 浅复制,同步影响
//         for (var i = 0; i < teamPlayers.length; i++) {
//             if (teamPlayers[i] === player) {
//                 teamPlayers.splice(i, 1)
//             }
//         }
//     }

//     /****************玩家换队***************************/
//     operations.changeTeam = function (player, newTeamColor) {
//         operations.removePlayer(player) // 删
//         player.teamColor = newTeamColor // 改变队伍颜色
//         operations.addPlayer(player) // 增
//     }

//     /****************阵亡***************************/
//     operations.playerDead = function (player) {
//         var teamColor = player.teamColor
//         var teamPlayers = players[teamColor]
//         // 全部阵亡状态
//         var all_dead = true;
//         for (let player of teamPlayers) {
//             if (player.state !== 'dead') {
//                 all_dead = false
//                 break
//             }
//         }
//         // 全部阵亡
//         if (all_dead) {
//             for (let lPlyer of teamPlayers) { // 全部输
//                 lPlyer.lose()
//             }
//             for (let color in players) { // 全部赢
//                 if (color !== teamColor) {
//                     var teamPlayers = players[color] // 其他队伍的玩家
//                     for (let player of teamPlayers) {
//                         player.win() // 其他队伍赢
//                     }
//                 }
//             }
//         }
//     }

//     // 接收消息
//     var reciveMessage = function () {
//         // arguments 的第一个参数为消息名称
//         var message = Array.prototype.shift.call(arguments);
//         operations[message].apply(this, arguments);
//     }
//     return {
//         reciveMessage: reciveMessage
//     }
// })()

// // 红队:
// 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.remove(); 
// player2.remove(); 
// player3.changeTeam('blue'); 
// player4.die();


// ** 中介者模式的例子——购买商品**

var goods = { // 手机库存
    "red|32G": 3,
    "red|16G": 0,
    "blue|32G": 1,
    "blue|16G": 6
};

var mediator = (function () {
    var colorSelect = document.getElementById('colorSelect'),
        numberInput = document.getElementById('numberInput'),
        memorySelect = document.getElementById('memorySelect'),
        colorInfo = document.getElementById('colorInfo'),
        numberInfo = document.getElementById('numberInfo'),
        memoryInfo = document.getElementById('memoryInfo'),
        nextBtn = document.getElementById('nextBtn');
    return {
        changed: function (obj) {
            var color = colorSelect.value, // 颜色 
                memory = memorySelect.value,// 内存 
                number = numberInput.value, // 数量 
                stock = goods[color + '|' + memory];  // 颜色和内存对应的手机库存数量
            if (obj === colorSelect) { // 如果改变的是选择颜色下拉框
                colorInfo.innerHTML = color;
            } else if (obj === memorySelect) { // 内存
                memoryInfo.innerHTML = memory;
            } else if (obj === numberInput) { // 数量
                numberInfo.innerHTML = number;
            }

            if (!color) {
                nextBtn.disabled = true;
                nextBtn.innerHTML = '请选择手机颜色';
                return;
            }

            if (!memory) {
                nextBtn.disabled = true;
                nextBtn.innerHTML = '请选择内存';
                return;
            }

            if (((number - 0) | 0) !== (number - 0) || !(number > 0)) {
                nextBtn.disabled = true;
                nextBtn.innerHTML = '请输入正确的购买数量';
                return;
            }

            if (number > stock) { // 当前选择数量没有超过库存量
                nextBtn.disabled = true;
                nextBtn.innerHTML = '库存不足';
                return;
            }

            nextBtn.disabled = false;
            nextBtn.innerHTML = '放入购物车';
        }
    }
})()

// 事件函数:
colorSelect.onchange = function () {
    mediator.changed(this);
};
memorySelect.onchange = function () {
    mediator.changed(this);
};
numberInput.oninput = function () {
    mediator.changed(this);
};
<html>

<body>
	<div>
		选择颜色: 选择内存:
		<select id="colorSelect">
            <option value="">请选择</option> 
            <option value="red">红色</option> 
            <option value="blue">蓝色</option>
        </select>
        <select id="memorySelect">
            <option value="">请选择</option>
            <option value="32G">32G</option>
            <option value="16G">16G</option>
        </select>
        输入购买数量: <input type="text" id="numberInput"/>
        <br/>
        您选择了颜色: <div id="colorInfo"></div>
        <br/> 您选择了内存: <div id="memoryInfo"></div>
        <br/> 您输入了数量: <div id="numberInfo"></div>
        <br/>
        <button id="nextBtn" disabled="true">请选择手机颜色和购买数量</button>
    </div>
</html>