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

文章目录

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

NXP RT1060学习总结 - CANFD功能

1、RT1060-CAN FD功能简介 这里使用RT1060系列的1064芯片进行开发,测试板是官方提供的开发板;RT1060系列支持3路CAN功能,CAN1和CAN2只能最为普通的CAN外设,支持CAN2.0,而CAN3支持CAN-FD功能;CAN-FD功能这里…

CS和msf的权限传递,利用mimikatz抓取win10明文密码

一、Cobaltstrike的安装 http://t.csdnimg.cn/yhZin 安装CobaltStrike,浏览博主的上篇文章即可!!! 这里我在自己的本机win11上执行了Client去连接kali中的Server端,直接执行.cmd文件即可!!&…

【计算机毕业设计】基于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 删除信息流…

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;逐渐成为了行业内的热门话题。然而…

渲染100为什么是高性价比网渲平台?渲染100邀请码1a12

市面上主流的网渲平台有很多&#xff0c;如渲染100、瑞云、炫云、渲云等&#xff0c;这些平台各有特色和优势&#xff0c;也都声称自己性价比高&#xff0c;以渲染100为例&#xff0c;我们来介绍下它的优势有哪些。 1、渲染100对新用户很友好&#xff0c;注册填邀请码1a12有3…

【CTF MISC】XCTF GFSJ0008 low Writeup(LSB隐写+QR Code识别)

low 暂无 解法 用 StegSolve 打开&#xff0c;Green plane 1 中疑似隐藏有二维码。 使用大佬写的代码&#xff1a; from PIL import Imageimg Image.open("./low.bmp") img_tmp img.copy() pix img_tmp.load() width, height img_tmp.size for w in range(wid…

每日一题——Python实现PAT甲级1046 Shortest Distance(举一反三+思想解读+逐步优化)

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 专业点评 优点 改进建议 时间复杂度分析 空间复杂度分析 总结 我要更…

HCIP-Datacom-ARST自选题库__MAC【14道题】

一、单选题 1.缺省情况下&#xff0c;以下哪种安全MAC地址类型在设备重启后表项会丢失? 黑洞MAC地址 Sticky MAC地址 安全动态MAC地址 安全静态MAC地址 2.华为交换机MAC地址表中的动态sticky MAC地址的默认老化时间是多少秒? 300 不会老化 400 500 3.华为交换机MA…

Polar Web【简单】login

Polar Web【简单】login 本文旨在记录此题的探索和解决过程。 Contents Polar Web【简单】login探索&思路EXP (python)结果&总结 探索&思路 查看源码&#xff0c;发现存在用户信息泄露。尝试用获取信息登录&#xff0c;显示成功&#xff0c;但其后没有可做的操作。…

有损线、上升边退化与材料特性(七)

有损线的不良影响 当信号沿着实际有损线传输时&#xff0c;高频分量的幅度减小&#xff0c;而低频分量的幅度保持不变。由于这个种选择性的衰减&#xff0c;信号的带宽降低&#xff0c;信号的上升边会增长。如果上升边的退化与单位间隔比很小&#xff0c;同位模式将比较稳定与…

Django视图与路由:打造你的网络帝国

Hello&#xff0c;我是阿佑&#xff0c;上期给大家讲了 Django ORM魔法&#xff1a;用Python代码召唤数据库之灵&#xff01; 今天将带大家深入探讨了视图的工作原理、如何编写高效的函数视图和类视图&#xff0c;以及如何巧妙地利用URL路由来提升应用的用户体验和可维护性。通…

最新h5st(4.7.2)参数分析与纯算法还原(含算法源码)

文章目录 1. 写在前面2. 加密分析3. 算法还原 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python…

图解 Python 编程(10) | 错误与异常处理

&#x1f31e;欢迎来到Python的世界 &#x1f308;博客主页&#xff1a;卿云阁 &#x1f48c;欢迎关注&#x1f389;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f31f;本文由卿云阁原创&#xff01; &#x1f4c6;首发时间&#xff1a;&#x1f339;2024年6月2日&…