美文网首页
第九章 命令模式

第九章 命令模式

作者: 狐尼克朱迪 | 来源:发表于2016-09-28 09:47 被阅读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中函数是一等公民,命令模式相当于记录了一个个的执行函数。

    相关文章

      网友评论

          本文标题:第九章 命令模式

          本文链接:https://www.haomeiwen.com/subject/ktuhyttx.html