命令模式是JavaScript設計模式中行爲型的一種設計模式;html
定義:前端
向某些對象發送請求,可是並不知道被請求的操做具體是什麼,因此咱們但願以一種鬆耦合的方式來設計程序,使得請求發送者和接收者之間可以消除彼此之間的耦合關係;而咱們的這種鬆耦合的方式就是命令模式;java
白話解釋:web
假如你是大家公司研發部門團隊leader,這時大家領導分佈給你一個任務,你粗略的看了一下,很簡單的需求比較容易實現;而你做爲團隊leader,天天確定會有不少事情,因此你準備把需求直接丟給組員去開發和實現;領導根本不在乎是你作的仍是你讓誰作的,領導要的只是最終成果!這裏領導就是命令的發佈者,而你就是命令的接收者;設計模式
代碼實現:數組
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <button id="button1">發佈命令給前端</button> <button id="button2">發佈命令給後臺</button> </body> <script> var button1 = document.getElementById("button1"); var button2 = document.getElementById("button2"); // 定義命令 var command = function(Executor,func){ Executor.onclick = func; } // 定義領導 var Leader = {}; Leader.teamleader = { web:function(){ console.log("前端立刻完成"); }, java:function(){ console.log("後臺立刻完成") } } command(button1,Leader.teamleader.web); command(button2,Leader.teamleader.java); </script> </html>
運行結果:微信
這裏的將命令對象單獨的定義爲一個方法,根據參數執行不一樣的任務。點擊不一樣按鈕的時候,執行不一樣的命令;學習
宏命令:ui
宏命令是一組命令的集合,經過執行宏命令的方式能夠一次性執行一批命令;
this
電腦開機自啓動項:如今不少軟件都默認添加了電腦開機自啓動,就是咱們電腦開機以後默認啓動某些特定的軟件;這就是一種宏命令的場景;
var QQCommand = { excute:function(){ console.log("自啓動QQ成功"); } } var weChatCommand = { excute:function(){ console.log("自啓動微信成功"); } } var MacroCommand = function(){ return { list:[], add:function(command){ this.list.push(command); }, excute:function(){ for(var i = 0,command;command = this.list[i++];){ command.excute(); } } } } var macroCommand = MacroCommand(); macroCommand.add(QQCommand); macroCommand.add(weChatCommand); macroCommand.excute();
上面的代碼中,咱們在宏命令對象中定義了一個list數組,而後經過add方法進行添加到執行隊列中,所謂的執行隊列就是list這個數組,而後咱們經過循環來依次執行命令,這就產生了咱們的宏命令,經過一個命令一鍵啓動多個任務;
命令模式其實就是定義一個命令對象,請求發佈者經過參數化的形式傳入參數來進行執行具體不一樣的操做,來達到請求發佈者與接收者的解耦;
最後的話:
本系列一共寫了十篇經常使用的JavaScript設計模式的文章,參考了大量的資料加上本身的理解但願以最通俗易懂的方式來說給你們聽,因爲本人水平和精力有限,理解有誤的地方請及時指出,設計模式系列文章暫時先擱置,後續再補充;下個月開始準備系統學習ES6,完成ES6系列文章;