将执行的命令封装,解决命令发起者与命令执行者之间的耦合,每一条命令表示着一系列的操作,命令的使用者不必了解命令执行者的命令接口是如何实现的,只需要知道如何调用
有的时候需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知被请求的操作是什么,此时希
JavaScript 作为将函数作为一等对象的语言,命令模式早已融入到语言中了
var command = { click: function (msg) { console.log('click and do something', msg); }, change: function (msg) { console.log('change and do something', msg); }, blur: function (msg) { console.log('blur and do something', msg); }, on: function (config) { this[config.type](config.msg); } } command.on({type: 'click', msg: 'onClick'}); // click and do something onClick command.on({type: 'blur', msg: 'onBlur'}); // blur and do something onBlur宏命令是一组命令的集合,通过执行宏命令的方式,可以依次执行一批命令
// 创建子命令 var closeDoorCommand = { execute: funciton () { console.log('关门'); } } var openPcCommand = { execute: funciton () { console.log('开电脑'); } } var openQQCommand = { execute: funciton () { console.log('登录QQ'); } } // 创建宏命令 var MacroCommand = funciton () { return { commandsList: [], add: function (command) { this.commandsList.push(command); }, execute: function () { for (var i = 0, command; command = this.commandsList[i++];) { command.execute(); } } } } // 执行 var macroCommand = MacroCommand(); macroCommand.add(closeDoorCommand); macroCommand.add(openPcCommand); macroCommand.add(openQQCommand); macroCommand.execute();