第九章 命令模式


命令模式:將請求與實現解耦并封裝城獨立對象,從而使不同的請求對客戶端的實現參數化。我們在使用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中函數是一等公民,命令模式相當于記錄了一個個的執行函數。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容