命令模式:将请求与实现解耦并封装城独立对象,从而使不同的请求对客户端的实现参数化。我们在使用jquery的动画时会如下面的形式调用:
$(selector).animate({params},speed,callback);
这种就是一种命令模式。
例子
以一个游戏的实现为例,当用户按下W、S、A、D
时角色会有不同的动作,而且有回放功能记录以前的操作:
var Ryu = {
attack: function(){
console.log("攻击");
},
defense: function(){
console.log("防守");
},
jump: function(){
console.log("跳跃");
},
crouch: function(){
console.log("蹲下");
}
};
var makeCommand = function(receiver, state){
return function(){
receiver[state]();
}
};
var commands = {
"119": "jump", // W
"115": "crouch", // S
"97": "defense", // A
"100": "attack" // D
};
var commandStack = [];
document.onkeypress = function( ev ){
var keyCode = ev.keyCode,
command = makeCommand( Ryu, commands[keyCode] );
if(command){
command();
commandStack.push(command);
}
};
document.getElementById("replay").onClick = function(){
var command;
while( command = commandStack.shift() ){
command();
}
}
回放功能很好的体现了命令模式的作用。js中函数是一等公民,命令模式相当于记录了一个个的执行函数。
网友评论