设计模式 -- 命令模式

news2025/1/16 11:16:35

前言

月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂)

央是一片海洋,海乃百川,代表着一块海绵(吸纳万物)

泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出)

月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容

希望大家一起坚持这个过程,也同样希望大家最终都能从零到零,把知识从薄变厚,再由厚变薄!

一、什么是命令模式?

        命令模式是一种行为设计模式,它允许将请求封装为一个对象,从而使不同的请求可以被参数化、队列化、记录日志、撤销等操作。该模式的核心是将请求的发起者和执行者解耦,以便更好地管理和扩展系统

二、命令模式的优缺点:

优点:

  1. 解耦:命令模式可以将请求者和接收者解耦,请求者不需要知道接收者的具体实现,只需要知道命令即可。

  2. 可扩展性:可以很容易地添加新的命令,只需要添加一个新的命令类即可。

  3. 可撤销:命令模式可以实现撤销和重做操作,可以很方便地回滚操作。

  4. 可记录:命令模式可以记录操作日志,方便后续分析和处理。

  5. 安全性:命令模式可以提高系统的安全性,因为可以限制命令的权限。

  6. 灵活性:命令模式可以根据需求灵活地组合命令,实现复杂的操作

缺点:

  1. 代码多余:实现命令模式需要创建多个类,这可能会导致代码过于冗长。

  2. 额外的内存开销:每个命令对象都需要额外的内存开销,这可能会导致系统的性能下降。

  3. 可能会导致系统复杂性增加:实现命令模式需要创建多个类,这可能会导致系统变得更加复杂。

  4. 可能会导致系统响应时间增加:由于命令模式需要创建多个对象,这可能会导致系统响应时间变慢。

  5. 可能会导致代码难以理解:由于命令模式需要创建多个类和对象,这可能会导致代码难以理解和维护。

三、命令模式的结构:

 

 

 Command(manager):定义命令接口,生命执行的方法

ConcreteCommand(ManageForAdd或者ManageForDelete):命令接口实现对象

Receiver(Product,Front,Back)

invoker:接受命令并执行

四、命令模式实战:

        以上图为示例,现在有甲方要求做出一个功能,而甲方需要找到项目对接人,不想事无巨细的去与每个组进行沟通,具体命令就有项目经理去下达一项项命令,指挥对应的组去完成

1.创建项目组(Product.Front,Back以及公共接口):

 

 

 2.创建命令类及其抽象类

 

 

 

 3.创建Invoker

 4.测试

 5.测试结果:

 

五.总结:

命令模式适用于以下场景:

  1. 需要将请求发送给多个对象,但是不知道具体接收者是谁。

  2. 需要将请求排队或者记录请求日志。

  3. 需要实现可撤销操作。

  4. 需要实现事务性操作。

  5. 需要实现回滚操作。

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

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

相关文章

线性表详解

目录 1.线性表的定义和特点 2.案例 2.1一元多项式的计算 可以通过下面这个题目简单练习一下 2.2稀疏多项式的计算 2.3图书信息管理系统 3.线性表的类型定义 4.线性表的顺序表示和实现 4.1线性表的顺序储存表示 4.2顺序表中基本操作的实现 5.线性表的链式表现和实现 …

vba:inputbox

inputbox函数与方法 1.区别一:外观区别 InputBox 函数 在一对话框来中显示提示,等待用户输入正文或按下按钮,并返回包含文本框内容的 String。 Application.InputBox 方法 显示一个接收用户输入的对话框。返回此对话框中输入的信息。 -----…

分享一个国内使用的ChatGPT的方法

介绍 ChatGPT ChatGPT是一种基于自然语言处理技术的对话生成模型。它是由OpenAI公司开发的一种语言模型,可以在大规模语料库上进行无监督学习,并生成高质量的自然语言文本。ChatGPT可以用于多种应用场景,例如智能客服、语音助手、聊天机器人…

JAVA学习笔记(注解)

1. JDK预定义注解 (1) Deprecated(表示标记对象已过时) (2) SuppressWarnings("all") (忽略标记对象的警告) 2. 元注解(用于描述注解的注解) Target 描述注解所生效的位置 Retention 描述注…

SpringBooot

目录 一、简介 1、使用原因 2、JavaConfig (1)Configuration注解 (2)Bean注解 (3)ImportResource注解 (4)PropertyResource注解 (5)案例 3、简介 4…

Faster-RCNN代码解读8:代码调试与总结

Faster-RCNN代码解读8:代码调试与总结 前言 ​ 因为最近打算尝试一下Faster-RCNN的复现,不要多想,我还没有厉害到可以一个人复现所有代码。所以,是参考别人的代码,进行自己的解读。 ​ 代码来自于B站的UP主&#xff0…

网络协议-前端重点——DNS和CDN

目录 DNS的基础知识 统一资源定位符(URL)(网址) DNS(Dimain Name System)(域名系统) DNS Query过程 DNS记录 A记录 AAAA记录 CNAME记录(Canonical Name Record) MX记录&#…

Blender3.5 视图切换

目录 1. 数字小键盘切换视图1.1 正交顶视图1.2 正交前视图1.3 正交右视图1.4 透视图1.5 四格视图 2. 鼠标点击切换视图2.1 点击视图,根据需求选择对应视图2.2 点导航栏的坐标轴切换 3. 启用字母区数字键3.1 编辑——偏好设置——输入——勾选“模拟数字键” 1. 数字…

Linux驱动——高级I/O操作(四)

目录 几种I/O模型总结 异步通知 几种I/O模型总结 阻塞 IO:在资源不可用时,进程阻塞,阻塞发生在驱动中,资源可用后进程被唤醒,在阻塞期间不占用CPU,是最常用的一种方式。 非阻塞 I/O: 调用立即返回,即便是在资…

《Unity Shader 入门精要》第10章 高级纹理

第10章 高级纹理 10.1 立方体纹理 在图形学中,立方体纹理 (Cubemap) 是环境映射 (Environment Mapping) 的一种实现方法。 和之前见到的纹理不同,立方体纹理一共包含了6张图像,这些图像对应了…

typescript的keyof的用法

第一种:与接口一起用,返回联合类型 interface Person {name: string;age: number;location: string;}type K1keyof Person; // "name" | "age" | "gender" let a:K1name 第二种:与typeof一起用,可…

天梯赛练习(L2-013 ~ L2-020)

L2-013 红色警报 战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一…

【springcloud开发教程】负载均衡——Ribbon

Ribbon是什么? Spring Cloud Ribbon 是基于Netflix Ribbon 实现的一套客户端负载均衡的工具。简单的说,Ribbon 是 Netflix 发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将 Netflix 的中间层服务连接在一起。Ribbon 的…

CentOS7安装docker以及docker-compose

前言 系统版本:CentOS7.9 docker版本:当前最新版本是23.0.3 docker compose版本:v2.17.2 参考官网文档:跳转链接 安装docker 删除原有的docker(如果有的话) sudo yum remove docker \docker-client …

CSAPPLab1-DataLab

1、bitXor 异或:不是同时为0和不是同时为1的情况进行按位与 /** bitXor - x^y using only ~ and &* Example: bitXor(4, 5) 1* Legal ops: ~ &* Max ops: 14* Rating: 1*/int bitXor(int x, int y) {return ~(~x & ~y) & ~(x & y); } …

可鉴别加密工作模式-同时保护数据机密性和完整性(OCB、CCM、KeyWrap、EAX和GCM)第一部分

当算法用于同时保护数据的机密性和完整性时,应选取合适的可鉴别加密工作模式,例如OCB、CCM、KeyWrap、EAX和GCM等工作模式。以下总结来自GBT36624-2018国标文本。 在可鉴别加密工作模式之前,先来说说分组密码的工作模式可参考GBT17964-2021版…

反欺诈(羊毛盾)API 实现用户行为分析的思路分析

简介 反欺诈(羊毛盾)API 是一种用于识别和防范各种欺诈行为的技术解决方案。它可集成到各种应用程序和平台中,通过手机号码、手机IP进行异常检测,达到防范恶意注册、虚假评论、虚假交易等欺诈行为的目的。 本文主要介绍反欺诈&a…

1677_MIT 6.828 xv6中增加CPU alarm

全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 前面把课程要求做了一个简单的翻译,从课程的要求说明中其实已经能够得到很多的提示。这个alarm的功能,其实有点类似回调函数的概念&#xf…

基于springboot+mysql+jsp实现校园新闻发布系统

基于springbootmysqljsp实现校园新闻发布系统 一、系统介绍1、系统主要功能:2.涉及技术框架:3.本项目所用环境: 二、功能展示三、其它系统四、获取源码 一、系统介绍 1、系统主要功能: 普通用户:浏览主页面&#xff…

【音视频处理】直播工作原理,直播CDN、推流拉流、流媒体服务究竟是什么

大家好,欢迎来到停止重构的频道。 本期我们讨论直播技术。 我们将会介绍,直播工作原理,流媒体服务的作用,推流/拉流、直播CDN等等。 这里需要特别说明的是,直播指的是:1对多的直播,平常直播平…