命令模式-Command Pattern

server/2025/1/15 17:08:53/

什么是命令模式

命令模式是一种行为类设计模式,核心是将每种请求或操作封装为一个独立的对象,从而可以集中管理这些请求或操作,比如将请求队列化依次执行、或者对操作进行记录和撤销。

命令模式通过将请求的发送者(客户端)和接收者(执行请求的对象)解耦,提供了更大的灵活性和可维护性。

优点和应用场景

优点:

  • 解耦请求发送者和接受者,让系统更加灵活、可扩展
  • 由于每个操作都是一个独立的命令类,所以我们需要新增命令操作时,不需要改动现有代码。

命令模式典型的应用场景:

  • 系统需要统一处理多种复杂的操作,比如操作排队、记录操作历史、撤销重做等。
  • 系统需要持续增加新的命令、或者要处理复杂的组合命令(子命令),使用命令模式可以实现解耦

抽象命令

package test.pattern;public interface Command {void execute();
}

具体命令

package test.pattern;public class TurnOffCommand implements Command {private Device device;public TurnOffCommand(Device device) {this.device = device;}public void execute() {device.turnOff();}
}
package test.pattern;public class TurnOnCommand implements Command {private Device device;public TurnOnCommand(Device device) {this.device = device;}public void execute() {device.turnOn();}
}

接收者

package test.pattern;public class Device {private String name;public Device(String name) {this.name = name;}public void turnOn() {System.out.println(name + " 设备打开");}public void turnOff() {System.out.println(name + " 设备关闭");}
}

调用者

package test.pattern;public class RemoteControl {private Command command;public void setCommand(Command command) {this.command = command;}public void pressButton() {command.execute();}
}

测试

package test.pattern;public class Client {public static void main(String[] args) {// 创建接收者对象Device tv = new Device("TV");Device stereo = new Device("Stereo");// 创建具体命令对象,可以绑定不同设备TurnOnCommand turnOn = new TurnOnCommand(tv);TurnOffCommand turnOff = new TurnOffCommand(stereo);// 创建调用者RemoteControl remote = new RemoteControl();// 执行命令remote.setCommand(turnOn);remote.pressButton();remote.setCommand(turnOff);remote.pressButton();}
}

http://www.ppmy.cn/server/158610.html

相关文章

MERN全栈脚手架(MongoDB、Express、React、Node)与Yeoman详解

MERN 全栈脚手架是一种用于快速构建基于 MongoDB、Express、React 和 Node.js 的全栈应用的框架或模板。它帮助开发者快速启动项目,减少了从零开始配置的时间。以下是关于 MERN 全栈脚手架的详细解析。 一、MERN 技术栈简介 MongoDB: 文档型数据库,用于…

flutter VoidCallBack ValueChange<T> 的函数定义

在 Flutter 中&#xff0c;VoidCallback 和 ValueChanged<T> 是两种常用的回调函数类型&#xff0c;它们通常用于处理事件或传递数据。下面是它们的详细定义及使用方式。 1. VoidCallback 函数类型 VoidCallback 是一个没有参数也没有返回值的回调函数类型。它通常用于…

[0405].第05节:搭建Redis主从架构

Redis学习大纲 一、3主3从的集群配置&#xff1a; 1.1.集群规划 1.分片集群需要的节点数量较多&#xff0c;这里我们搭建一个最小的分片集群&#xff0c;包含3个master节点&#xff0c;每个master包含一个slave节点&#xff0c;结构如下&#xff1a; 2.每组是一主一从&#x…

electron编写一个macOS风格的桌面应用

electron编写一个macOS风格的桌面应用 基于vue3vite&#xff0c;看一下最后的效果&#xff1a; 针对原始的electron模板&#xff0c;做了如下几点调整&#xff1a; 背景边框进行了圆角处理隐藏了原始的titleBar增加了macOS风格的窗口管理工具&#xff0c;就是交通灯按钮组实现…

fpga系列 HDL:跨时钟域同步 双触发器同步器

目录 **双触发器同步器&#xff08;Two-Flip-Flop Synchronizer&#xff09;示例代码**&#xff1a;双触发器同步器的优缺点优点&#xff1a;缺点&#xff1a;适用场景&#xff1a; 应用实例&#xff1a;同步来自spi_slave的单个使能信号 跨时钟域的设计需要特别小心&#xff0…

快速上手Git——Windows系统下Git的安装与简单使用流程

一、Git的下载和安装 Git官网链接&#xff1a;https://git-scm.com/ 进入官网后选择Downloads 选择与系统相符合的版本下载&#xff0c;这里我使用的是windows系统 然后点击下载 根据流程安装完成后&#xff0c;使用以下命令查看git版本 git -v运行结果&#xff1a; 二、…

PID控制器 (Proportional-Integral-Derivative Controller) 算法详解及案例分析

PID控制器 (Proportional-Integral-Derivative Controller) 算法详解及案例分析 目录 PID控制器 (Proportional-Integral-Derivative Controller) 算法详解及案例分析1. 引言2. PID控制器的基本概念2.1 PID控制器的定义2.2 PID控制器的核心思想2.3 PID控制器的应用领域 3. PID控…

【Rust】结构体示例与调试

目录 思维导图 1. 引言 2. 初始程序示例 3. 使用元组重构 4. 使用结构体重构 5. 调试与输出 6. 进一步的功能扩展 思维导图 1. 引言 本文通过一个计算矩形面积的程序&#xff0c;展示了如何从简单变量逐步重构到使用结构体&#xff0c;以提高代码的清晰度和可管理性。结…