命令模式:将请求封装成对象,从而分离请求发起者和请求接收者(执行者)之间的耦合关系。命令执行之前,可以预先往命令对象里植入命令的接收者。
首先是用普通对象来封装请求的写法:
var TV = {
open:function(){
console.log('open TV');
}
close:function(){
console.log('close TV');
}
};
var createTvCommand = function(receiver){
this.receiver = receiver;
}
createTvCommand.prototype.execute = function(){
this.receiver.open();
};
createTvCommand.prototype.close = function(){
this.receiver.close();
}
var setCommand = function(command){
document.getElementById('execute').onclick = function(){
command.execute();
};
docment.getElementById('undo').onclick = function(){
command.undo();
};
}
setCommand(new createTvCommand(Tv));
下面改成用函数来封装。
var Tv = function(){
open:function(){
console.log('open Tv');
}
close:function(){
console.log('close Tv');
};
}
var createTvCommand = function(receiver){
var execute = function(){
return receiver.open();
}
var undo = function(){
return receiver.undo();
};
};
var setCommand = function(cmd){
document.getElementById('execute').onclick = function(){
cmd.execute();
};
document.getElementById('undo').onclick = function(){
cmd.undo();
};
};
setCommand (createTvCommand(Tv));