JavaScript設(shè)計模式之命令模式
命令模式是JavaScript設(shè)計模式中行為型的一種設(shè)計模式;
定義:向某些對象發(fā)送請求,但是并不知道被請求的操作具體是什么,所以我們希望以一種松耦合的方式來設(shè)計程序,使得請求發(fā)送者和接收者之間能夠消除彼此之間的耦合關(guān)系;而我們的這種松耦合的方式就是命令模式;
白話解釋:假如你是你們公司研發(fā)部門團隊leader,這時你們領(lǐng)導(dǎo)分布給你一個任務(wù),你粗略的看了一下,很簡單的需求比較容易實現(xiàn);而你作為團隊leader,每天肯定會有很多事情,所以你準(zhǔn)備把需求直接丟給組員去開發(fā)和實現(xiàn);領(lǐng)導(dǎo)根本不在意是你做的還是你讓誰做的,領(lǐng)導(dǎo)要的只是最終成果!這里領(lǐng)導(dǎo)就是命令的發(fā)布者,而你就是命令的接收者;
代碼實現(xiàn):
<!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">發(fā)布命令給前端</button> <button id="button2">發(fā)布命令給后臺</button> </body> <script> var button1 = document.getElementById("button1"); var button2 = document.getElementById("button2"); // 定義命令 var command = function(Executor,func){ Executor.onclick = func; } // 定義領(lǐng)導(dǎo) var Leader = {}; Leader.teamleader = { web:function(){ console.log("前端馬上完成"); }, java:function(){ console.log("后臺馬上完成") } } command(button1,Leader.teamleader.web); command(button2,Leader.teamleader.java); </script> </html>
運行結(jié)果:
這里的將命令對象單獨的定義為一個方法,根據(jù)參數(shù)執(zhí)行不同的任務(wù)。點擊不同按鈕的時候,執(zhí)行不同的命令;
宏命令:
宏命令是一組命令的集合,通過執(zhí)行宏命令的方式可以一次性執(zhí)行一批命令;
電腦開機自啟動項:現(xiàn)在很多軟件都默認(rèn)添加了電腦開機自啟動,就是我們電腦開機之后默認(rèn)啟動某些特定的軟件;這就是一種宏命令的場景;
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數(shù)組,然后通過add方法進(jìn)行添加到執(zhí)行隊列中,所謂的執(zhí)行隊列就是list這個數(shù)組,然后我們通過循環(huán)來依次執(zhí)行命令,這就產(chǎn)生了我們的宏命令,通過一個命令一鍵啟動多個任務(wù);
命令模式其實就是定義一個命令對象,請求發(fā)布者通過參數(shù)化的形式傳入?yún)?shù)來進(jìn)行執(zhí)行具體不同的操作,來達(dá)到請求發(fā)布者與接收者的解耦;
最后的話:
本系列一共寫了十篇常用的JavaScript設(shè)計模式的文章,參考了大量的資料加上自己的理解希望以最通俗易懂的方式來講給大家聽,由于本人水平和精力有限,理解有誤的地方請及時指出,設(shè)計模式系列文章暫時先擱置,后續(xù)再補充;下個月開始準(zhǔn)備系統(tǒng)學(xué)習(xí)ES6,完成ES6系列文章;
以上就是JavaScript設(shè)計模式之命令模式的詳細(xì)內(nèi)容,更多關(guān)于JavaScript設(shè)計模式的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
微信小程序城市定位的實現(xiàn)實例(獲取當(dāng)前所在國家城市信息)
這篇文章給大家認(rèn)真介紹了微信小程序城市定位的實現(xiàn)實例,主要實現(xiàn)了獲取當(dāng)前所在國家城市信息的相關(guān)資料,文中介紹的非常詳細(xì),相信對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-05-05JavaScript知識點總結(jié)(十一)之js中的Object類詳解
這篇文章主要介紹了JavaScript知識點總結(jié)(十一)之js中的Object類詳解的相關(guān)資料,需要的朋友可以參考下2016-05-05學(xué)習(xí)javascript面向?qū)ο?javascript實現(xiàn)繼承的方式
這篇文章主要為大家介紹了javascript實現(xiàn)繼承的方式,學(xué)習(xí)javascript面向?qū)ο?,感興趣的小伙伴們可以參考一下2016-01-01js生成1到100的隨機數(shù)最簡單的實現(xiàn)方法
在本篇文章里小編給大家整理了關(guān)于js生成1到100的隨機數(shù)最簡單的實現(xiàn)方法,有需要的朋友們可以學(xué)習(xí)下。2020-02-02