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