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