- 问题场景
调用者和执行者彼此不了解,需解耦 - 解决思路
双方约定调用command.execute方法实现解耦,命令对象相当于中介,把接受到的命令调用执行者来真正执行。 - 具体实现(js)
var setCommand = function(btn, command){
btn.onclick = function(){
command.execute();
}
}
var menuBar = {
refresh: function () {
console.log("refresh");
}
}
//把接受者/执行者封闭在闭包中
var RefreshCommand = function (receiver) {
return {
execute: function(){
receiver.refresh();
//此处可以记录当前状态,便于undo
},
undo: function(){
...
}
}
}
var refreshCommand = RefreshCommand(menuBar);
setCommand(button1, refreshCommand);
- 优缺点
优点:执行者和调用者解耦,还能完成命令的撤销和排队功能