设计模式(十三)行为型模式---命令模式

文章目录

  • 命令模式简介
  • 结构
  • 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.mzph.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…