命令模式:將請求與實現(xiàn)解耦并封裝城獨立對象,從而使不同的請求對客戶端的實現(xiàn)參數(shù)化慷丽。我們在使用jquery的動畫時會如下面的形式調(diào)用:
$(selector).animate({params},speed,callback);
這種就是一種命令模式款熬。
例子
以一個游戲的實現(xiàn)為例,當用戶按下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();
}
}
回放功能很好的體現(xiàn)了命令模式的作用健提。js中函數(shù)是一等公民琳猫,命令模式相當于記錄了一個個的執(zhí)行函數(shù)。