設計模式(十三)行為型模式---命令模式

文章目錄

  • 命令模式簡介
  • 結構
  • UML圖
  • 具體實現
    • UML圖
    • 代碼實現

命令模式簡介

  • 命令模式(command pattern)也叫動作模式或者事務模式。它是將請求(命令)封裝成對象,使得可以用不同的請求對客戶端進行參數化,具體的請求可以在運行時更改、排隊和記錄,它將發出者和 接收者解耦,順序是: 發出者 --> 命令 --> 接收者。
  • 實際使用:Spring JdbcTemplate 中的execute/query方法、Runnable Thread start()。

結構

  • 1.抽象命令(Abstract Command): 抽象命令是一個接口,定義了執行操作的統一方法。具體的命令類會實現這個接口,并提供執行相應操作的具體邏輯
  • 2.具體命令(Concrete Command):具體命令類實現了抽象命令類,它擁有 接收者對象 ,并通過調用接收者的功能來完成命令要執行的操作。
  • 3.接收者(Receiver): 執行實際命令的類,命令對象會調用接收者的方法來執行請求。
  • 4.調用者(Invoker):持有命令對象,通常是多個,并通過訪問命令對象來執行相關請求,他不直接訪問接收者。

UML圖

在這里插入圖片描述

具體實現

例子:餐廳中,服務員(Waiter)點菜,然后廚師(Chef)做菜。

UML圖

在這里插入圖片描述

代碼實現

  • 抽象命令類
package com.xxliao.pattern.behavioral.command.demo;/*** @author xxliao* @description: 抽象命令類接口,定義了執行操作的統一方法* @date 2024/5/25 19:26*/
public interface Command {// 點菜void order();// 取消點菜void cancelOrder();
}
  • 具體命令類
package com.xxliao.pattern.behavioral.command.demo;/*** @author xxliao* @description: 具體命令類,實現了抽象命令接口,通過組合,擁有接收者對象,并通過調用接收者對象的方法來完成命令要執行的操作。* @date 2024/5/25 19:30*/public class OrderCommand implements Command {// 聚合方式 持有 接收者對象private Chef chef;public OrderCommand(Chef chef) {this.chef = chef;}@Overridepublic void order() {chef.cook();}@Overridepublic void cancelOrder() {chef.cancelCooking();}
}
  • 接受者類
package com.xxliao.pattern.behavioral.command.demo;/*** @author xxliao* @description: 接收者類,執行實際命令的類,命令對象會調用接收者的方法來執行請求* @date 2024/5/25 19:28*/
public class Chef {public void cook() {System.out.println("chef process order。。。");}public void cancelCooking() {System.out.println("chef cancel cooking...");}
}
  • 調用者類
package com.xxliao.pattern.behavioral.command.demo;/*** @author xxliao* @description: 調用者類 - 持有命令對象,通常是多個,并通過訪問命令對象來執行相關請求,他不直接訪問接收者。* @date 2024/5/25 22:40*/
public class Waiter {// 持有命令對象private Command command;public void setCommand(Command command) {this.command = command;}/*** @description  點餐* @author  xxliao* @date  2024/5/25 22:45*/public void takeOrder() {// 服務員收到顧客(客戶端)點餐請求System.out.println("服務員收到顧客(客戶端)點餐請求");// 執行點餐操作,使用命令對象,實際是具體命令對象去執行,然后調用的是接收者對象Chef相關的執行方法。command.order();}/*** @description  取消點餐* @author  xxliao* @date  2024/5/25 22:46*/public void cancelOrder() {// 服務員收到顧客(客戶端)取消點餐請求System.out.println("服務員收到顧客(客戶端)取消點餐請求");// 執行取消點餐操作,使用命令對象,實際是具體命令對象去執行,然后調用的是接收者對象Chef相關的執行方法。command.cancelOrder();}
}
  • 測試客戶端
package com.xxliao.pattern.behavioral.command.demo;/*** @author xxliao* @description: 命令模式 測試客戶端* @date 2024/5/25 22:47*/
public class Client {public static void main(String[] args) {// 創建接收者對象 -- 廚師對象Chef chef = new Chef();// 創建具體命令對象, 然后將接收者對象 當作參數 傳入Command orderCommand = new OrderCommand(chef);// 創建調用者對象 -- 服務員Waiter waiter = new Waiter();// 將具體命令對象 傳入 調用者對象waiter.setCommand(orderCommand);// 執行相關操作waiter.takeOrder();waiter.cancelOrder();}
}
  • 測試結果
    在這里插入圖片描述

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

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

相關文章

MD中 面料的物理屬性參數

該圖片是Marvelous Designer軟件中"Fabric Physical Properties"(面料物理屬性)面板的截圖,用于調整面料在彎曲、折疊時的硬度(Buckling Stiffness)。 目標部分解釋了調整Buckling Stiffness的作用:通過調整該百分比值來決定面料角落處的硬度。進入80%的Buckling St…

筆記-anaconda配置Python環境

查看環境 conda env list 創建python name環境,python版本為3.9: conda create -n name python3.9 激活: conda activate name 去掉激活: conda deactivate name 進入pandas目錄: cd D:\學習\pyton\antpy代碼\ant-learn-…

NXP RT1060學習總結 - CANFD功能

1、RT1060-CAN FD功能簡介 這里使用RT1060系列的1064芯片進行開發,測試板是官方提供的開發板;RT1060系列支持3路CAN功能,CAN1和CAN2只能最為普通的CAN外設,支持CAN2.0,而CAN3支持CAN-FD功能;CAN-FD功能這里…

【LeetCode 77. 組合】

1. 題目 2. 分析 本題有個難點在于如何保存深搜得到的結果?總結了一下,深搜處理的代碼,關于返回值有三大類。 第一類:層層傳遞,將最深層的結果傳上來;這類題有:【反轉鏈表】 第二類&#xff1…

域名/子域名接管漏洞

域名/子域名接管漏洞 1.域接管2.子域接管子域接管概述使用BBOT掃描可劫持的子域通過DNS通配符生成子域接管 3.利用子域接管4.子域名接管防御手段 1.域接管 如果您發現某個域名被某個服務使用,但公司已經失去了對其的所有權,您可以嘗試注冊它&#xff08…

默認路由,直接路由,靜態路由,動態路由

對于華為設備,如華為路由器或交換機,設置這些路由類型需要通過設備的管理界面或命令行界面進行配置。以下是一般情況下如何在華為設備上設置這些路由類型的指導: 默認路由: 使用命令行界面(CLI)&#xff0c…

QMatrix詳解

一、定義 QMatrix是Qt框架中的一個類,它表示一個2x3的變換矩陣,通常用于進行二維圖形的幾何變換。這個類允許你對圖形進行平移、縮放、旋轉和剪切等操作。 二、功能 QMatrix的主要功能是提供一個便捷的方式來對二維圖形進行線性變換。通過構建一個變換…

CS和msf的權限傳遞,利用mimikatz抓取win10明文密碼

一、Cobaltstrike的安裝 http://t.csdnimg.cn/yhZin 安裝CobaltStrike,瀏覽博主的上篇文章即可!!! 這里我在自己的本機win11上執行了Client去連接kali中的Server端,直接執行.cmd文件即可!!&…

【vscode】ctrl+shift+end選中以下所有行刪除

總結,ctrlshiftend選中以下所有行 以下由chatgpt生成 在 Visual Studio Code(VS Code)中,如果你想要選中當前光標所在的一行及之后的所有行并刪除它們,可以通過組合鍵操作來實現。這種功能在編輯大型文件時特別有用&am…

【計算機畢業設計】基于SSM++jsp的校園驛站管理系統【源碼+lw+部署文檔】

目錄 第1章 緒論 1.1 課題背景 1.2 課題意義 1.3 研究內容 第2章 開發環境與技術 2.1 MYSQL數據庫 2.2 JSP技術 2.3 SSM框架 第3章 系統分析 3.1 可行性分析 3.1.1 技術可行性 3.1.2 經濟可行性 3.1.3 操作可行性 3.2 系統流程 3.2.1 操作流程 3.2.2 登錄流程 3.2.3 刪除信息流…

node會話管理詳解(cookie、session、token)

在Node.js中,cookie、session和token都是用于會話管理的機制,但它們各自有不同的使用場景和特性。 一、cookie 命令:npm install cookie-parser -save -save 參數表示將這個模塊添加到項目的 package.json 文件的 dependencies 部分&#x…

C語言| 輸出菱形*

C語言| 輸出*三角形-CSDN博客 輸出菱形。 【分析思路】 學會輸出*的三角形之后輸出菱形就很簡單了。我們分析一下,菱形是由兩個對稱的三角形組成的,也因為是對稱的,所以輸出的菱形的行數肯定是一個奇數。 1 我們在編程的時候,要…

基于卷積-小波神經網絡的SAR圖像海冰變化檢測方法(MATLAB R2018A)

海冰是冰凍圈的重要組成部分,海冰的變化信息對航行安全和自然資源開采等非常重要,許多船舶沒有加固防冰設備,因此,必須避開所有的冰區。尤其當冰壓很高時,即使破冰船也很難在冰層中前行。為了安全航行,獲取…

leetCode.89. 格雷編碼

leetCode.89. 格雷編碼 題目思路 代碼 class Solution { public:vector<int> grayCode(int n) {vector<int> res(1,0); // n 0時&#xff0c;之后一位0while (n--) {// 想要實現對象超下來&#xff0c;就從末尾開始&#xff0c;讓vector里面 加 元素for (int i …

Stable Diffusion Webui--安裝與使用

最近進行的課程匯報&#xff0c;學習了2023年的CVPR文章《DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation》&#xff0c;因此嘗試使用了幾種方法對這篇文章的工作進行了一定的復現。本文主要介紹Stable Diffusion Web UI(webui)的安裝…

【因果推斷python】10_分組和虛擬變量回歸1

目錄 分組數據回歸 分組數據回歸 并非所有數據點都是一樣的。 如果我們再次查看我們的 ENEM 數據集&#xff0c;相比小規模學校的分數&#xff0c;我們更相信規模較大的學校的分數。 這并不是說大型學校更好或什么&#xff0c; 而只是因為它們的較大規模意味著更小的方差。 i…

bootstrap5-學習筆記1-容器+布局+按鈕+工具

參考&#xff1a; Bootstrap5 教程 | 菜鳥教程 https://www.runoob.com/bootstrap5/bootstrap5-tutorial.html Spacing Bootstrap v5 中文文檔 v5.3 | Bootstrap 中文網 https://v5.bootcss.com/docs/utilities/spacing/ 之前用bootstrap2和3比較多&#xff0c;最近用到了5&a…

SRE視角下的DevOps構建之道

引言&#xff1a; 隨著數字化時代的飛速發展&#xff0c;軟件成為了企業競爭力的核心。為了更高效地交付高質量的軟件&#xff0c;DevOps&#xff08;Development和Operations的組合&#xff09;作為一種文化、實踐和工具集的集合&#xff0c;逐漸成為了行業內的熱門話題。然而…

OpenFHE 使用樣例

參考文獻&#xff1a; 編譯 OpenFHEOpenFHE 源碼解析&#xff1a;PKE 部分[ABB22] Al Badawi A, Bates J, Bergamaschi F, et al. Openfhe: Open-source fully homomorphic encryption library[C]//Proceedings of the 10th Workshop on Encrypted Computing & Applied Ho…

渲染100為什么是高性價比網渲平臺?渲染100邀請碼1a12

市面上主流的網渲平臺有很多&#xff0c;如渲染100、瑞云、炫云、渲云等&#xff0c;這些平臺各有特色和優勢&#xff0c;也都聲稱自己性價比高&#xff0c;以渲染100為例&#xff0c;我們來介紹下它的優勢有哪些。 1、渲染100對新用戶很友好&#xff0c;注冊填邀請碼1a12有3…