Java設計模式之行為型模式(命令模式)介紹與說明

一、核心定義與目標

命令模式通過對象化請求,將操作的具體實現細節隱藏在命令對象中,使得調用者(Invoker)無需直接與接收者(Receiver)交互,僅需通過命令對象間接調用。這種解耦設計支持以下功能:

  1. 請求隊列化:命令對象可存儲、傳遞并按需執行。
  2. 撤銷與重做:通過記錄命令歷史實現操作回滾。
  3. 日志記錄與事務支持:便于追蹤和恢復系統狀態。

二、模式結構與角色

命令模式涉及以下核心角色:

  1. Command(抽象命令接口)
    定義執行命令的統一接口,通常包含execute()方法。
    public interface Command { void execute(); 
    }
    
  2. ConcreteCommand(具體命令類)
    實現Command接口,持有接收者(Receiver)的引用,并調用其具體方法。
    public class LightOnCommand implements Command {private Light light;public LightOnCommand(Light light) { this.light = light; }public void execute() { light.turnOn(); }
    }
    
  3. Receiver(接收者)
    實際執行操作的對象,例如電燈、音響設備等。
    public class Light {public void turnOn() { System.out.println("開燈"); }
    }
    
  4. Invoker(調用者)
    負責觸發命令的執行,但不關心命令的具體實現。
    public class RemoteControl {private Command command;public void setCommand(Command command) { this.command = command; }public void pressButton() { command.execute(); }
    }
    
  5. Client(客戶端)
    創建具體命令對象并關聯接收者,將其傳遞給調用者。

三、代碼示例與實現

場景:遙控器控制電燈

  1. 定義接收者
    class Light {public void on() { System.out.println("燈開啟"); }public void off() { System.out.println("燈關閉"); }
    }
    
  2. 實現具體命令
    class LightOnCommand implements Command {private Light light;public LightOnCommand(Light light) { this.light = light; }public void execute() { light.on(); }
    }
    
  3. 調用者與客戶端
    public class Client {public static void main(String[] args) {Light light = new Light();Command command = new LightOnCommand(light);RemoteControl control = new RemoteControl();control.setCommand(command);control.pressButton(); // 輸出:燈開啟}
    }
    
    結果:通過調用者間接控制接收者,實現解耦。

四、高級應用場景

  1. 宏命令(Macro Command)
    將多個命令組合成一個復合命令,例如批量執行操作:
    class MacroCommand implements Command {private List commands = new ArrayList<>();public void add(Command cmd) { commands.add(cmd); }public void execute() { commands.forEach(Command::execute); }
    }
    
  2. 撤銷與重做(Undo/Redo)
    通過擴展命令對象的undo()方法實現撤銷功能:
    public interface UndoableCommand extends Command {void undo();
    }
    
  3. 異步命令隊列
    結合線程池處理異步任務,提升系統吞吐量。

五、優缺點分析

優點缺點
解耦請求發送者與接收者,提升靈活性可能導致類爆炸問題(每個命令需獨立類)
支持擴展新命令,符合開閉原則增加系統復雜度,需額外管理命令對象
便于實現撤銷、日志記錄等高級功能過度設計風險,簡單場景可能不必要

六、適用場景

  1. 需要將請求參數化或延遲執行(如GUI按鈕點擊)。
  2. 需支持撤銷/重做操作(如文本編輯器)。
  3. 系統需記錄操作日志或實現事務管理。

七、與其他模式的對比

策略模式:關注算法替換,而命令模式關注請求封裝。

  • 觀察者模式:通過訂閱-發布機制解耦,而命令模式通過對象化請求解耦。

總結

命令模式通過對象化請求實現了靈活的調用機制,是構建可擴展、可維護系統的利器。但在實際應用中需權衡其復雜性,避免濫用。結合具體場景(如撤銷操作、異步任務)選擇是否引入該模式,可顯著提升代碼的解耦性與擴展性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/914408.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/914408.shtml
英文地址,請注明出處:http://en.pswp.cn/news/914408.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【深度學習新浪潮】xAI新發布的Grok4有什么看點?

Grok4作為馬斯克旗下xAI公司最新發布的旗艦AI模型,其核心看點和評測要點可總結如下: 一、Grok4的核心看點 學術推理能力全面超越人類博士水平 在「人類終極考試」(HLE)中,Grok4基礎版正確率達25.4%,啟用工具后飆升至44.4%,遠超Gemini 2.5 Pro(21.6%)和OpenAI o3(20.…

觀成科技:基于自監督學習技術的惡意加密流量檢測方案

1.前言當前&#xff0c;隨著加密協議技術的廣泛應用&#xff0c;互聯網用戶的個人流量隱私得到了有效保護&#xff0c;但與此同時也衍生出一系列安全問題。由于加密流量在傳輸過程中無法被解密&#xff0c;導致傳輸信息呈現“黑盒化”特征&#xff0c;這為惡意攻擊者利用加密流…

通用定時器GPT

目錄 GPT核心特性 GPT 計數器操作模式 重啟模式 自由運行模式 GPT時鐘源 GPT框圖 輸入捕獲&#xff1a;測量外部信號的高電平脈沖寬度 輸出比較&#xff1a;生成 1kHz PWM 波 GPT模塊外部引腳復用與功能映射表 GPT使用注意事項 GPT Memory Map GPT寄存器 GPTx_CR寄存…

#oda0095. 字符串通配符【B卷 100分】-字符串

題目描述問題描述&#xff1a;在計算機中&#xff0c;通配符一種特殊語法&#xff0c;廣泛應用于文件搜索、數據庫、正則表達式等領域。現要求各位實現字符串通配符的算法。要求&#xff1a;實現如下2個通配符&#xff1a;* &#xff1a;匹配0個或以上的字符&#xff08;注&…

面向對象設計原則

面向對象&#xff1a;是一種編程思想&#xff0c;面向過程是關注實現的步驟&#xff0c;每個步驟定義一個函數&#xff0c;調用函數執行即可。面向對象關注的是誰來執行&#xff0c;把具有相同屬性和行為的一類事物進行抽象成類&#xff0c;然后再通過實例化出一個個具體的對象…

Hyperledger Fabric深入解讀:企業級區塊鏈的架構、應用與未來

一、引言&#xff1a;企業級區塊鏈的標桿Hyperledger Fabric是Linux基金會主導的開源項目&#xff0c;專為企業級應用設計&#xff0c;以模塊化架構、許可鏈機制和隱私保護為核心&#xff0c;廣泛應用于金融、供應鏈、醫療等領域。相較于公有鏈&#xff08;如以太坊&#xff09…

從0開始學習R語言--Day45--Hausman檢驗

當我們在探究數據本身是否和變量相關時&#xff0c;往往都會對這兩者進行回歸分析&#xff0c;控制一下變量來看看趨勢走向。但其實在分析前&#xff0c;我們可以先嘗試做Hausman檢驗&#xff0c;這可以幫助我們判斷數據的變化到底是因為變量不一樣了還是因為自己的個體效應所以…

閑庭信步使用圖像驗證平臺加速FPGA的開發:第九課——圖像插值的FPGA實現

&#xff08;本系列只需要modelsim即可完成數字圖像的處理&#xff0c;每個工程都搭建了全自動化的仿真環境&#xff0c;只需要雙擊top_tb.bat文件就可以完成整個的仿真&#xff0c;大大降低了初學者的門檻&#xff01;&#xff01;&#xff01;&#xff01;如需要該系列的工程…

Android事件分發機制完整總結

一、核心概念事件分發的本質Android事件分發采用責任鏈模式&#xff0c;事件從Activity開始&#xff0c;依次經過ViewGroup和View。整個機制只有一個入口&#xff1a;dispatchTouchEvent方法。onInterceptTouchEvent和onTouchEvent都不是獨立的事件入口&#xff0c;而是被dispa…

【論文閱讀】AdaReasoner: Adaptive Reasoning Enables More Flexible Thinking

AdaReasoner: Adaptive Reasoning Enables More Flexible Thinking3. AdaReasoner3.1 動機3.2 問題定義3.3 動作選擇過程3.3.1 動作空間定義3.3.2 動作選擇3.4 探索策略3.5 強化學習訓練3.5.1 訓練算法3.5.2 目標函數3.5.3 損失函數AdaReasoner: Adaptive Reasoning Enables Mo…

深入了解Modbus TCP:工業通信的“通用語言”

目錄 簡介一、Modbus TCP的“前世今生”二、Modbus TCP的核心特點三、Modbus TCP的工作原理1. 報文結構2. 功能碼四、Modbus TCP的應用場景五、使用Modbus TCP的注意事項六、總結簡介 在工業自動化的世界里,不同設備之間的“對話”至關重要。從PLC(可編程邏輯控制器)到傳感…

基于Selenium和FFmpeg的全平臺短視頻自動化發布系統

一、項目背景與概述在當今短視頻營銷盛行的時代&#xff0c;許多企業和個人需要同時管理多個短視頻平臺賬號。手動上傳視頻到抖音、快手、小紅書等平臺不僅效率低下&#xff0c;而且容易出錯。本文將介紹一個基于Python的自動化短視頻處理與發布系統&#xff0c;它能夠&#xf…

技術演進中的開發沉思-31 MFC系列:類層次結構

提及MFC&#xff0c;不得不說他的類層次。如果把 MFC 框架比作是座精密的鐘表&#xff0c;那類層次結構便是其內部咬合的齒輪組。每個類都有明確的 “家族地位”&#xff0c;既繼承著先輩的本領&#xff0c;又發展出獨特的專長。這種層級分明的設計&#xff0c;讓 Windows 編程…

2023.05.06 更新前端面試問題總結(12道題)

2023.05.04 - 2023.05.06 更新前端面試問題總結&#xff08;12道題&#xff09; 獲取更多面試相關問題可以訪問 github 地址: https://github.com/pro-collection/interview-question/issues gitee 地址: https://gitee.com/yanleweb/interview-question/issues 目錄&#xff1…

【網絡】Linux 內核優化實戰 - net.ipv4.tcp_keepalive_intvl

目錄1. TCP Keep-Alive 機制回顧2. 參數作用3. 參數取值與影響4. 使用場景與建議5. 相關參數6. 如何配置該參數臨時生效&#xff08;重啟后失效&#xff09;&#xff1a;永久生效&#xff08;需重啟或重載配置&#xff09;&#xff1a;7. 性能優化建議8. 監控與故障排查net.ipv…

20250710解決KickPi的K7的SDK編譯異常:rk3576-android14.0-25250704.tar.gz【降低BUILD_JOBS】

20250710解決KickPi的K7的SDK編譯異常&#xff1a;rk3576-android14.0-25250704.tar.gz【降低BUILD_JOBS】 2025/7/10 20:59緣起&#xff1a;KickPi的K7的SDK編譯異常&#xff1a;rk3576-android14.0-25250704.tar.gzZ:\14TB\SDK\rk3576_data\1-SDK軟件源碼\Android14\20250704…

《Java EE與中間件》實驗一 基于MyBatis的留言本

目 錄 一、實驗目的和要求 1、實驗目的 2、實驗要求 二、實驗實現思路及步驟 1、實驗思路 2、實驗步驟 3、實驗方案 三、主要開發工具 四、實驗效果及實現代碼 1、留言本數據庫構建實現 &#xff08;1&#xff09;建立javaee-project數據庫 &#xff08;2&#xf…

ARM匯編編程(AArch64架構) - 第14課:安全擴展(ARM TrustZone)

目錄1. TrustZone基礎概念1.1 安全擴展架構1.2 關鍵組件2. 世界切換機制2.1 狀態切換流程2.2 關鍵寄存器配置3. SMC調用實現3.1 調用規范3.2 完整調用流程4. 實戰練習4.1 實驗&#xff1a;實現雙世界通信4.2 調試技巧1. TrustZone基礎概念 1.1 安全擴展架構 startuml rectang…

OpenCV哈希算法------Marr-Hildreth 邊緣檢測哈希算法

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 該類實現了 Marr-Hildreth 邊緣檢測哈希算法&#xff08;Marr-Hildreth Hash&#xff09;&#xff0c;用于圖像相似性比較。它基于 Marr-Hildreth …

【git#5】遠程操作 標簽管理

&#x1f4c3;個人主頁&#xff1a;island1314 ?? 歡迎關注&#xff1a;&#x1f44d;點贊 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f49e; &#x1f49e; &#x1f49e; 生活總是不會一帆風順&#xff0c;前進的道路也不會永遠一馬平川&#xff0c;如何面…