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

Java设计模式-命令模式

在 Java 中使用命令模式来模拟餐厅下单吃饭的过程,可以通过以下步骤来实现:

  1. 创建命令接口:所有的命令都需要实现一个命令接口,包含一个execute()方法。

  2. 创建具体的命令类:每个具体的命令(比如下单、撤销订单)都需要实现命令接口。

  3. 创建接收者类:这些类是命令的实际执行者(如餐厅的服务员、厨师等)。

  4. 创建命令调用者类:负责调度命令并保存命令以支持撤销功能。

以下是一个简单的实现:

1. 创建命令接口

public interface Command { void execute(); // 执行命令 void undo(); // 撤销命令 }

2. 创建接收者类(如餐厅服务员、厨师等)

// 服务员类 public class Waiter { public void takeOrder(String order) { System.out.println("服务员:接到订单 - " + order); } public void serveOrder(String order) { System.out.println("服务员:提供餐点 - " + order); } public void cancelOrder(String order) { System.out.println("服务员:取消订单 - " + order); } }

3. 创建具体的命令类

// 下单命令 public class OrderCommand implements Command { private Waiter waiter; private String order; public OrderCommand(Waiter waiter, String order) { this.waiter = waiter; this.order = order; } @Override public void execute() { waiter.takeOrder(order); } @Override public void undo() { waiter.cancelOrder(order); } } // 上菜命令 public class ServeCommand implements Command { private Waiter waiter; private String order; public ServeCommand(Waiter waiter, String order) { this.waiter = waiter; this.order = order; } @Override public void execute() { waiter.serveOrder(order); } @Override public void undo() { System.out.println("撤销上菜命令"); } }

4. 创建命令调用者类(Invoker)

// 下单命令 public class OrderCommand implements Command { private Waiter waiter; private String order; public OrderCommand(Waiter waiter, String order) { this.waiter = waiter; this.order = order; } @Override public void execute() { waiter.takeOrder(order); } @Override public void undo() { waiter.cancelOrder(order); } } // 上菜命令 public class ServeCommand implements Command { private Waiter waiter; private String order; public ServeCommand(Waiter waiter, String order) { this.waiter = waiter; this.order = order; } @Override public void execute() { waiter.serveOrder(order); } @Override public void undo() { System.out.println("撤销上菜命令"); } }

5. 测试代码

public class Main { public static void main(String[] args) { // 创建服务员对象 Waiter waiter = new Waiter(); // 创建命令对象 Command order1 = new OrderCommand(waiter, "炒饭"); Command serve1 = new ServeCommand(waiter, "炒饭"); // 创建命令调用者对象 OrderInvoker invoker = new OrderInvoker(); // 下单并执行命令 invoker.executeCommand(order1); invoker.executeCommand(serve1); // 撤销上一个命令(如取消订单) invoker.undoCommand(); // 撤销上菜命令 invoker.undoCommand(); // 撤销订单命令 } }

6. 输出结果

服务员:接到订单 - 炒饭 服务员:提供餐点 - 炒饭 撤销上菜命令 服务员:取消订单 - 炒饭

解释:

  1. Command接口定义了两个方法:execute()undo()execute()用于执行命令,undo()用于撤销命令。

  2. Waiter是命令的接收者,负责具体的操作(如下单、提供餐点、取消订单等)。

  3. OrderCommandServeCommand是具体的命令类,实现了Command接口。

  4. OrderInvoker负责接收命令并执行,同时维护一个历史栈(commandHistory),以便支持撤销功能。

通过命令模式,你可以将请求的发送者(如用户)和请求的执行者(如服务员)解耦,并且支持命令的撤销操作。

http://www.cnnetsun.cn/news/89041.html

相关文章:

  • 信息安全技术与Kali Linux
  • GEO系统:多区域搜索排名监控与品牌形象统一维护解决方案
  • 17、Apache服务器的代理配置、URL重写、自定义日志及性能监控
  • 18、Apache服务器性能测试与配置全解析
  • PostgreSQL 18 远程操作实战:从连接到备份的操作实践记录
  • S33-装一个Server2016+PCS7虚拟机
  • LobeChat能否部署在腾讯云CVM?国产云服务商适配教程
  • 本地使用ComfyUI运行Stable Diffusion 3.5
  • 力扣(LeetCode) 27: 移除元素 - 解法思路
  • 国内企业在泰国的三大机遇与四大挑战:玛雅出海东南亚的破局之道
  • 手把手教你部署LobeChat镜像,打造专属AI助手门户
  • Dify + HuggingFace镜像网站加速模型加载技巧
  • Docker安装TensorRT镜像时的网络代理设置技巧
  • EmotiVoice:开源多情感TTS引擎
  • LobeChat能否防范偏见歧视?公平性优化措施
  • 网络安全审查第一案回顾与启示
  • offsetof 宏的实现
  • vsftpd 安装、升级、配置全流程总结(含问题解决方案)
  • HunyuanVideo-Foley部署:本地与云端GPU实战
  • LangChain工具使用:简化AI函数调用
  • Docker 镜像打包为 tar 并在其他环境加载运行(离线部署实战指南)
  • Docker 镜像体积优化实战:从 1GB 到 100MB
  • LobeChat能否分配任务?团队协作智能调度
  • LobeChat能否拒绝不当请求?安全护栏实践
  • 基于Docker安装的TensorRT镜像实现高并发推理
  • LobeChat能否支持WebRTC?实时音视频通话功能展望
  • 基于STM32单片机双轴追光系统光照自动向日寻光蓝牙无线APP/WiFi无线APP/摄像头视频监控/云平台设计S344
  • Linly-Talker容器化构建与部署指南
  • Plotly Dash多页面仪表盘的构建框架
  • 数据可视化中色彩运用的核心指南