Java设计模式(命令模式)

news2024/9/22 13:29:43
定义

       将一个请求封装为一个对象,从而让你可以用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作。

角色

      抽象命令类(Command):声明用于执行请求的execute方法,通过它可以调用请求接收者的相关操作。

      具体命令类(ConcreteCommand):具体实现了执行请求的execute方法,同时定义了接收者对象,并在执行方法时调用接收者的相关操作。

      调用者(Invoker):即请求的发送者,它通过命令对象来执行请求。它不需要在设计时确定具体接收者,在程序运行时注入对应的命令对象,从而实现间接地调用请求接收者的相关操作。

      接收者(Receiver):具体实现对请求的业务处理。

优点

      降低了系统的耦合度

      新的命令可以很容易地加入到系统中,符合开闭原则

      可以比较容易地设计一个命令队列或宏命令(组合命令)

      为请求的撤销(Undo)和恢复(Redo)操作提供了一种设计和实现方案

缺点

      使用命令模式可能会导致某些系统有过多的具体命令类(针对每一个对请求接收者的调用操作都需要设计一个具体命令类)

适用场景

      系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互

      系统需要在不同的时间指定请求、将请求排队和执行请求

      系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作

      系统需要将一组操作组合在一起形成宏命令

案例

      为了用户使用方便,某系统提供了一系列功能键,用户可以自定义功能键的功能,例如功能键FunctionButton可以用于退出系统(由SystemExitClass类来实现),也可以用于显示帮助文档(由DisplayHelpClass类来实现)。用户可以通过修改配置文件来改变功能键的用途,现使用命令模式来设计该系统,使得功能键类与功能类之间解耦,可为同一个功能键设置不同的功能。

类图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1990200.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS实现hover时文本上下出现线条

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>复杂Hover效果示例</title><style>p {f…

【案例38】Can’t get connection from database 排查详细记录

问题现象 客户要搭建灰度环境&#xff0c;启动后&#xff0c;登录超级管理员报连接不上数据库的错误。 Can’t get connection from database(XXX) 问题分析 1、一般碰到这个问题&#xff0c;初步就开始怀疑是sysconfig数据源不通导致的。 发现数据源是通的。 2、在sysconf…

【案例40】Apache中mod_proxy模块的使用

NC中间件 应用场景&#xff1a;配置了apache的情况&#xff0c;包括uap集群&#xff0c;配置https等场景下均适用&#xff1b;如果是单机&#xff08;NC单结点情况不存在问题&#xff0c;则不用配置这项; was环境也不用配置此项。&#xff09; 解决方案&#xff1a;按如下两…

【15.PIE-Engine案例——加载Landsat 8 SR数据集】

加载Landsat 8 SR数据集 原始路径 欢迎大家登录航天宏图官网查看本案例原始来源 最终结果 具体代码 /*** File : Landsat8SRImages* Time : 2020/7/21* Author : piesat* Version : 1.0* Contact : 400-890-0662* License : (C)Copyright 航天宏图信息技…

【C++】BFS解决Floodfill问题

目录 Floodfill算法介绍 解决方法 BFS 图画渲染 算法思路&#xff1a; 代码实现&#xff1a; 岛屿数量 算法思路 代码实现 岛屿的最大面积 算法思想 代码实现 被围绕的区域 算法思路 代码实现 总结&#xff1a; Floodfill算法介绍 Floodfill翻译过来就是“洪…

serial靶机渗透~反序列化

反序列化又叫对象注入&#xff0c;序列化在内部没有漏洞&#xff0c;漏洞产生是因为程序在处理对象、魔术函数以及序列化相关的问题导致的&#xff0c;当传给 unserialize()的参数可控时&#xff0c;那么用户就可以注入 payload&#xff0c;进行反序列化的时候就可能触发对象中…

【iOS】AutoreleasePool自动释放池的实现原理

目录 ARC与MRC项目中的main函数自动释放池autoreleasepool {}实现原理AutoreleasePoolPage总结 objc_autoreleasePoolPush的源码分析autoreleaseNewPageautoreleaseFullPageautoreleaseNoPage autoreleaseFast总结 autorelease方法源码分析objc_autoreleasePoolPop的源码分析po…

Html详解——Vue基础

HTML是什么&#xff1f; 超文本标记语言&#xff08;英语&#xff1a;HyperText Markup Language&#xff0c;简称&#xff1a;HTML&#xff09;是一种用来结构化 Web 网页及其内容的标记语言。网页内容可以是&#xff1a;一组段落、一个重点信息列表、也可以含有图片和数据表…

山海关古城信息管理测试--片区

1.片区的检验名称编号是否重复 1.1controller添加两个方法&#xff0c;检验片区编号和检验片区名称 作用为&#xff1a;调用方法判断片区编号与片区名称是否重复&#xff0c;并返回返回值 /*** 检验片区编号是否重复*/PostMapping( "/checkPqbhUnique")ResponseBody…

深度解密CRLF注入与重定向漏洞:从原理到实践

在网络安全的世界中&#xff0c;CRLF注入和重定向漏洞常常被视为潜在的威胁&#xff0c;可能导致信息泄露和用户误导等严重后果。CRLF注入利用换行符在HTTP响应中插入恶意代码&#xff0c;而重定向漏洞则可能将用户引导至恶意网站。理解这些漏洞的原理及其复现方法&#xff0c;…

一文了解服务器和电脑主机的区别及各自优势

服务器和电脑主机的区别主要是&#xff1a;服务器专为处理大量数据和网络服务设计&#xff0c;具备高性能、高稳定性和可扩展性&#xff0c;通常用于数据中心或大型企业环境&#xff1b;而电脑主机则面向个人用户&#xff0c;主要用于日常办公、娱乐等通用任务&#xff0c;成本…

【QT】Qt中Websocket的使用

一、WebSocket的定义 WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455&#xff0c;并由RFC7936补充规范。WebSocket API也被W3C定为标准。 WebSocket使得客户端和服务器之间的数据交换变得更加简单&#xff0c;…

HelloWorld驱动编写和加载驱动实验

HelloWorld驱动编写和加载驱动实验 Helloworld驱动实验驱动编写驱动的基本框架 内核模块实验设置交叉编译器找到RK3568平台交叉编译器&#xff1a;解压交叉编译器&#xff1a;设置全局的交叉编译器环境验证交叉编译器环境 编写Makefile编译模块模块的加载与卸载查看模块信息 He…

WT2605C蓝牙语音芯片赋能对讲机新体验:无屏操控、音频解码与蓝牙音箱三合一

一、产品概况 对讲机市场是一个技术成熟且具有广泛应用前景的市场。对讲机作为无线通信设备的一种&#xff0c;在许多不同的领域和业务中发挥着重要作用。从技术发展角度来看&#xff0c;对讲机经历了从模拟到数字的转型&#xff0c;以及从简单通信工具向多功能设备的演进。当…

LVS实验——部署DR模式集群

目录 一、实验环境 二、配置 1、LVS 2、router 3、client 4、RS 三、配置策略 四、测试 1.Director服务器采用双IP桥接网络&#xff0c;一个是VPP&#xff0c;一个DIP 2.Web服务器采用和DIP相同的网段和Director连接 3.每个Web服务器配置VIP 4.每个web服务器可以出外网…

【Python机器学习】回归——缩减系数来“理解”数据

如果数据特征比样本点还多&#xff0c;是不可以使用线性回归的&#xff0c;因为在计算的时候会出错。 如果特征比样本点还多&#xff08;n>m&#xff09;&#xff0c;也就是说输入数据的矩阵x不是满秩矩阵。非满秩矩阵在求逆时会出问题。 为了解决上述问题&#xff0c;可以…

贪心算法的初涉(双指针 + “过山车思想”)

“过山车”思想 首先我们用一道力扣的题目&#xff0c;来简单了解一下“过山车思想” 3228. 将 1 移动到末尾的最大操作次数 - 力扣&#xff08;LeetCode&#xff09; 给你一个 二进制字符串 s。 你可以对这个字符串执行 任意次 下述操作&#xff1a; 选择字符串中的任一…

京东京造的C2M供应链模式

京东自有品牌业务于2018年1月正式上线&#xff0c;在京东发展已久&#xff0c;依托京东供应链优势&#xff0c;已搭建出京东京造、惠寻、佳佰等多品牌矩阵。 京东给零售企业释放出了一个讯号&#xff1a;C2M崛起&#xff0c;消费者的需求开始走向多元化和个性化&#xff01; …

徐州市委书记宋乐伟一行莅临非凸科技徐州分公司调研

7月23日&#xff0c;徐州市委书记宋乐伟一行莅临非凸科技徐州分公司调研&#xff0c;详细了解非凸科技数智交易产品的生态体系以及AI算力赋能的实践成果&#xff0c;并就相关工作进行了现场指导与交流。 非凸科技徐州分公司位于淮海路经济区金融服务中心云盛大厦&#xff0c;致…

基于JSP、java、Tomcat三者的项目实战--校园交易平台系统--(实习,答辩皆可用到)--万字爆更

技术支持&#xff1a;JAVA、JSP 服务器&#xff1a;TOMCAT 7.0.86 编程软件&#xff1a;IntelliJ IDEA 2021.1.3 x64 全部文件展示 网页实现功能截图 主页 注册 登录 购物车主页 修改功能 修改成功 添加商品功能 添加成功 添加进入购物车功能 支付功能 支付过的历史清单账单…