命令模式是最常见的应用场景是,当有需要向某些对象发送请求时,并不需要知道请求的接受者是谁,也不需要知道请求的操作是什么。这时候就希望用一种松耦合的方式来设计程序,使得请求的发送者和接受者消除彼此的耦合关系。
比如设计一些按钮,开发者不需要知道这些按钮的具体操作,只需要给这些按钮设计好命令即可,至于命令具体是什么也不需要知道,因此可以设计成这样子。
let setCommand = function(button, command){
button.click = function(){
command.execute();
}
}
当真正使用时,就可以自行定义好command函数,比如
// 声明一个命令
let AddSubMenuCommand = function(receiver){
this.receiver = receiver;
}
addSubmenuCommand.prototype.execute = function(){
this.receiver.add();
}
// 声明添加命令的对象
let button1 = document.createElement('button');
let addSubMenuCommand = new AddSubMenuCommand();
// 给命令真正赋值
setCommand(button1, addSubMenuCommand);
由上面的简单例子可以看出,命令模式对于javascript而言,更像是高阶函数,因此命令模式在javascript中是一种隐形的模式。