摘要:作者按每天一個(gè)設(shè)計(jì)模式旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用和兩種語(yǔ)言實(shí)現(xiàn)。該對(duì)象執(zhí)行命令。命令模式按鈕參考設(shè)計(jì)模式和開(kāi)發(fā)實(shí)踐如何實(shí)現(xiàn)命令模式
作者按:《每天一個(gè)設(shè)計(jì)模式》旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用javascript和python兩種語(yǔ)言實(shí)現(xiàn)。誠(chéng)然,每種設(shè)計(jì)模式都有多種實(shí)現(xiàn)方式,但此小冊(cè)只記錄最直截了當(dāng)?shù)膶?shí)現(xiàn)方式 :)
原文地址是:《每天一個(gè)設(shè)計(jì)模式之命令模式》
歡迎關(guān)注個(gè)人技術(shù)博客:godbmw.com。每周 1 篇原創(chuàng)技術(shù)分享!開(kāi)源教程(webpack、設(shè)計(jì)模式)、面試刷題(偏前端)、知識(shí)整理(每周零碎),歡迎長(zhǎng)期關(guān)注!
如果您也想進(jìn)行知識(shí)整理 + 搭建功能完善/設(shè)計(jì)簡(jiǎn)約/快速啟動(dòng)的個(gè)人博客,請(qǐng)直接戳theme-bmw
0. 示例代碼此節(jié)全部代碼
《每天一個(gè)設(shè)計(jì)模式》地址
1. 什么是“命令模式”?命令模式是一種數(shù)據(jù)驅(qū)動(dòng)的設(shè)計(jì)模式,它屬于行為型模式。
請(qǐng)求以命令的形式包裹在對(duì)象中,并傳給調(diào)用對(duì)象。
調(diào)用對(duì)象尋找可以處理該命令的合適的對(duì)象,并把該命令傳給相應(yīng)的對(duì)象。
該對(duì)象執(zhí)行命令。
在這三步驟中,分別有 3 個(gè)不同的主體:發(fā)送者、傳遞者和執(zhí)行者。在實(shí)現(xiàn)過(guò)程中,需要特別關(guān)注。
2. 應(yīng)用場(chǎng)景有時(shí)候需要向某些對(duì)象發(fā)送請(qǐng)求,但是又不知道請(qǐng)求的接受者是誰(shuí),更不知道被請(qǐng)求的操作是什么。此時(shí),命令模式就是以一種松耦合的方式來(lái)設(shè)計(jì)程序。
3. 代碼實(shí)現(xiàn) 3.1 python3 實(shí)現(xiàn)命令對(duì)象將動(dòng)作的接收者設(shè)置在屬性中,并且對(duì)外暴露了execute接口(按照習(xí)慣約定)。
在其他類設(shè)置命令并且執(zhí)行命令的時(shí)候,只需要按照約定調(diào)用Command對(duì)象的execute()即可。到底是誰(shuí)接受命令,并且怎么執(zhí)行命令,都交給Command對(duì)象來(lái)處理!
__author__ = "godbmw.com" # 接受到命令,執(zhí)行具體操作 class Receiver(object): def action(self): print("按鈕按下,執(zhí)行操作") # 命令對(duì)象 class Command: def __init__(self, receiver): self.receiver = receiver def execute(self): self.receiver.action() # 具體業(yè)務(wù)類 class Button: def __init__(self): self.command = None # 設(shè)置命令對(duì)戲那個(gè) def set_command(self, command): self.command = command # 按下按鈕,交給命令對(duì)象調(diào)用相關(guān)函數(shù) def down(self): if not self.command: return self.command.execute() if __name__ == "__main__": receiver = Receiver() command = Command(receiver) button = Button() button.set_command(command) button.down()3.2 ES6 實(shí)現(xiàn)
setCommand方法為按鈕指定了命令對(duì)象,命令對(duì)象為調(diào)用者(按鈕)找到了接收者(MenuBar),并且執(zhí)行了相關(guān)操作。而按鈕本身并不需要關(guān)心接收者和接受操作。
// 接受到命令,執(zhí)行相關(guān)操作 const MenuBar = { refresh() { console.log("刷新菜單頁(yè)面"); } }; // 命令對(duì)象,execute方法就是執(zhí)行相關(guān)命令 const RefreshMenuBarCommand = receiver => { return { execute() { receiver.refresh(); } }; }; // 為按鈕對(duì)象指定對(duì)應(yīng)的 對(duì)象 const setCommand = (button, command) => { button.onclick = () => { command.execute(); }; }; let refreshMenuBarCommand = RefreshMenuBarCommand(MenuBar); let button = document.querySelector("button"); setCommand(button, refreshMenuBarCommand);
下面是同級(jí)目錄的 html 代碼,在谷歌瀏覽器中打開(kāi)創(chuàng)建的index.html,并且打開(kāi)控制臺(tái),即可看到效果。
4. 參考命令模式
《JavaScript 設(shè)計(jì)模式和開(kāi)發(fā)實(shí)踐》
如何實(shí)現(xiàn)命令模式
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/42792.html
摘要:作者按每天一個(gè)設(shè)計(jì)模式旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用和兩種語(yǔ)言實(shí)現(xiàn)。該對(duì)象執(zhí)行命令。命令模式按鈕參考設(shè)計(jì)模式和開(kāi)發(fā)實(shí)踐如何實(shí)現(xiàn)命令模式 作者按:《每天一個(gè)設(shè)計(jì)模式》旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用javascript和python兩種語(yǔ)言實(shí)現(xiàn)。誠(chéng)然,每種設(shè)計(jì)模式都有多種實(shí)現(xiàn)方式,但此小冊(cè)只記錄最直截了當(dāng)?shù)膶?shí)現(xiàn)方式 :) 原文地址是:《每天一個(gè)設(shè)計(jì)模式之命令模式》 歡迎關(guān)注個(gè)人...
摘要:大家有好的文章可以在評(píng)論下面分享出來(lái)共同進(jìn)步本文鏈接數(shù)組使用之道程序員進(jìn)階學(xué)習(xí)書(shū)籍參考指南教你在不使用框架的情況下也能寫(xiě)出現(xiàn)代化代碼巧用數(shù)組函數(shù)框架中間件實(shí)現(xiàn)沒(méi)錯(cuò),這就是面向?qū)ο缶幊淘O(shè)計(jì)模式需要遵循的個(gè)基本原則令人困惑的在中使用協(xié)程實(shí)現(xiàn)多任 大家有好的文章,可以在評(píng)論下面分享出來(lái), 共同進(jìn)步! 本文github鏈接 php PHP 數(shù)組使用之道 PHP程序員進(jìn)階學(xué)習(xí)書(shū)籍參考指南 教你...
摘要:博主按每天一個(gè)設(shè)計(jì)模式旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用靠這吃飯和純粹喜歡兩種語(yǔ)言實(shí)現(xiàn)。單例模式用途如果一個(gè)類負(fù)責(zé)連接數(shù)據(jù)庫(kù)的線程池日志記錄邏輯等等,此時(shí)需要單例模式來(lái)保證對(duì)象不被重復(fù)創(chuàng)建,以達(dá)到降低開(kāi)銷的目的。 博主按:《每天一個(gè)設(shè)計(jì)模式》旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用javascript(_靠這吃飯_)和python(_純粹喜歡_)兩種語(yǔ)言實(shí)現(xiàn)。誠(chéng)然,每種設(shè)計(jì)模式都有多種實(shí)...
摘要:博主按每天一個(gè)設(shè)計(jì)模式旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用靠這吃飯和純粹喜歡兩種語(yǔ)言實(shí)現(xiàn)。單例模式用途如果一個(gè)類負(fù)責(zé)連接數(shù)據(jù)庫(kù)的線程池日志記錄邏輯等等,此時(shí)需要單例模式來(lái)保證對(duì)象不被重復(fù)創(chuàng)建,以達(dá)到降低開(kāi)銷的目的。 博主按:《每天一個(gè)設(shè)計(jì)模式》旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用javascript(_靠這吃飯_)和python(_純粹喜歡_)兩種語(yǔ)言實(shí)現(xiàn)。誠(chéng)然,每種設(shè)計(jì)模式都有多種實(shí)...
閱讀 2227·2021-11-15 11:39
閱讀 982·2021-09-26 09:55
閱讀 925·2021-09-04 16:48
閱讀 2831·2021-08-12 13:23
閱讀 919·2021-07-30 15:30
閱讀 2455·2019-08-29 14:16
閱讀 886·2019-08-26 10:15
閱讀 525·2019-08-23 18:40