设计模式 -- 命令模式

news/2025/1/14 10:17:17/

前言

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

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

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

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

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

一、什么是命令模式?

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

二、命令模式的优缺点:

优点:

  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.ppmy.cn/news/48463.html

相关文章

【Leetcode -342. 4的幂 -344.反转字符串 -345.反转字符串中的元音字母】

Leetcode Leetcode -342. 4的幂Leetcode -344.反转字符串Leetcode -345.反转字符串中的元音字母 Leetcode -342. 4的幂 题目:给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false …

item_get-获得aliexpress商品详情API的调用参数说明

item_get-获得aliexpress商品详情 aliexpress.item_get 公共参数 名称类型必须描述keyString是调用key(免)(测)(试)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中&…

Android入门

一、Android系统架构 Android大致可以分为4层架构:Linux内核层、系统运行库层、应用框架层和应用层 1.1Linux内核层 Android系统是基于Linux内核的,这一层为Android设备的各种硬件提供了如显示、音频、照相机、蓝牙、Wi-Fi等底层的驱动。 1.2系统运行层…

ELK简介

ELK 1. ELK2. Elasticsearch(ES)3. Logstash4. Kibana5. Filebeat6. 缓存/消息队列(redis、kafka、RabbitMQ等) 1. ELK ELK是三个开源软件的首字母缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们…

腾讯云COS+ElmentUI+SpringBoot视频上传功能实现

文章目录 第一步:选择合适的组件并整合到项目中第二步:前端校验第三步:绑定上传成功方法第四步:腾讯云cos后端接口配置 今天在做项目的时候需要完成一个视频上传的功能,这里做一个记录! 第一步:…

MongoDB实现---事务机制

事务机制 原子性是MongoDB实现事务的难点,隔离性和持久性则是MongoDB事务机制的亮点 ACID支持:由于前面说过MongoDB是基于大数据、提供高度可扩展和高可用;所以其事务机制不仅仅是一般ACID还是结合了BASE理论下的ACID 原子性:保…

GreenPlum (一) 初识

在开始了解GreenPlum之前,应该对这种产品的诞生有基本的了解,搭建一个基本的知识框架。对以下历史有基本了解之后应对下文术语进行基本阅读。 ​ 阅读目标: 阅读完成后需要对相关术语以及greenplum有基础理解。 文案基本互联网相关blog进行整体汇总&…

【RabbitMQ学习日记】—— 再见RabbitMQ

一、发布确认高级篇 在生产环境中由于一些不明原因,导致 rabbitmq 重启,在 RabbitMQ 重启期间生产者消息投递失败,导致消息丢失,需要手动处理和恢复如何才能进行 RabbitMQ 的消息可靠投递呢? 特别是在这样比较极端的情…