当前位置: 首页 > news >正文

java设计模式(十五)命令模式(Command Pattern)

1、模式介绍:

命令模式(Command Pattern)是一种行为设计模式,其主要目的是将请求封装成一个对象,从而允许使用不同的请求、队列或者日志来参数化其他对象。这种模式使得命令的请求者和实现者解耦。

2、应用场景:

需要将请求发送者和接收者解耦:命令模式将请求封装成对象,使得发送者和接收者彼此独立,发送者不需要知道接收者的具体操作。
需要在不同的时间指定请求、排队请求、记录请求:命令模式允许将操作请求封装成对象,从而使得可以参数化其他对象来执行不同的请求、将请求排队、记录日志等。

3、优点:

降低系统耦合度:命令模式将请求者与接收者解耦,请求者无需知道接收者的详细信息。
新增或修改命令更加灵活:可以新增命令类或修改命令参数,而不影响到其他类。
支持撤销和重做操作:通过保存历史命令可以实现撤销和重做操作。

4、缺点:

命令类可能会增加系统复杂度:每一个命令都需要设计一个具体命令类,可能会导致类的数量增加。
可能会导致系统产生大量的具体命令类:如果命令操作很多,可能会产生大量的具体命令类。

5、代码示例:

/*** 命令接口** @author FM_南风* @date 2024/7/5*/
public interface Command {void execute();
}/*** 接收者类 - 灯** @author FM_南风* @date 2024/7/5*/
public class Light {public void turnOn() {System.out.println("灯已打开");}public void turnOff() {System.out.println("灯已关闭");}
}/*** 具体命令类 - 关灯命令** @author FM_南风* @date 2024/7/5*/
public class LightOffCommand implements Command {private Light light;public LightOffCommand(Light light) {this.light = light;}public void execute() {light.turnOff();}
}/*** 具体命令类 - 开灯命令** @author FM_南风* @date 2024/7/5*/
public class LightOnCommand implements Command{private Light light;public LightOnCommand(Light light) {this.light = light;}public void execute() {light.turnOn();}
}/*** 调用者类 - 遥控器** @author FM_南风* @date 2024/7/5*/
public class RemoteControl {private Command command;public void setCommand(Command command) {this.command = command;}public void pressButton() {command.execute();}
}/*** 应用** @author FM_南风* @date 2024/7/5*/
public class CommandClient {public static void main(String[] args) {// 创建灯对象Light light = new Light();// 创建具体命令对象Command turnOnCommand = new LightOnCommand(light);Command turnOffCommand = new LightOffCommand(light);// 创建遥控器对象RemoteControl remoteControl = new RemoteControl();// 设置命令并执行remoteControl.setCommand(turnOnCommand);remoteControl.pressButton(); // 打开灯remoteControl.setCommand(turnOffCommand);remoteControl.pressButton(); // 关闭灯}
}

6、结果展示:

7、示例说明:

在这个示例中:
Command 是命令接口,定义了执行命令的方法 execute
LightOnCommand 和 LightOffCommand 是具体的命令类,分别用于开灯和关灯操作。
Light 是接收者类,定义了实际的操作方法。
RemoteControl 是调用者类,通过 setCommand 方法设置命令,通过 pressButton 方法执行命令。

相关文章:

  • 视频减小技巧:十大顶级视频压缩软件
  • OpenGL笔记七之顶点数据绘制命令和绘制模式
  • 制造工厂环保管理的痛点与智慧环保的解决之道
  • cuda安装使用问题,print(torch.cuda.is_available()),仍然输出false,如何解决?
  • AI新手指南:从小白到AI共创者的创业攻略
  • 经验分享|如何维护自己的大数据信用?
  • 移动端Vant-list的二次封装,查询参数重置
  • HUAWEI VRRP 实验
  • 哈弗架构和冯诺伊曼架构
  • 自动化一些操作
  • 【Redis】简单了解Redis中常用的命令与数据结构
  • 16进制转字符串,字符串转16进制
  • 【ChatGPT 消费者偏好】第二弹:ChatGPT在日常生活中的使用—推文分享—2024-07-10
  • 阿里云调整全球布局关停澳洲云服务器,澳洲服务器市场如何选择稳定可靠的云服务?
  • 从零开始搭建vite开发环境
  • Brief introduction of how to 'Call, Apply and Bind'
  • co模块的前端实现
  • CSS3 变换
  • Date型的使用
  • ERLANG 网工修炼笔记 ---- UDP
  • HTTP那些事
  • JavaScript 一些 DOM 的知识点
  • Java方法详解
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • java取消线程实例
  • JS题目及答案整理
  • node 版本过低
  • React Native移动开发实战-3-实现页面间的数据传递
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • spring security oauth2 password授权模式
  • Vue UI框架库开发介绍
  • 初探 Vue 生命周期和钩子函数
  • 高程读书笔记 第六章 面向对象程序设计
  • 来,膜拜下android roadmap,强大的执行力
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 说说动画卡顿的解决方案
  • - 转 Ext2.0 form使用实例
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 湖北分布式智能数据采集方法有哪些?
  • 交换综合实验一
  • #NOIP 2014# day.2 T2 寻找道路
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (2)MFC+openGL单文档框架glFrame
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (C11) 泛型表达式
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (Qt) 默认QtWidget应用包含什么?
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (五)Python 垃圾回收机制
  • (一)Docker基本介绍
  • (一)u-boot-nand.bin的下载
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)大型网站的系统架构
  • (转)大型网站架构演变和知识体系