第九章 命令模式

2016-09-28  本文已影响0人  狐尼克朱迪

命令模式:将请求与实现解耦并封装城独立对象,从而使不同的请求对客户端的实现参数化。我们在使用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中函数是一等公民,命令模式相当于记录了一个个的执行函数。

上一篇下一篇

猜你喜欢

热点阅读