news 2026/5/1 9:30:25

Java设计模式-命令模式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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),以便支持撤销功能。

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 8:23:00

算法竞赛从入门到跳楼(ACM-XCPC、蓝桥杯软件赛等)

算法竞赛从入门到跳楼(ACM-XCPC、蓝桥杯软件赛等) 第一周 12.8 12.9 12.10 12.11 12.12 12.13 12.14 主要是基础逻辑处理。 第二周 12.15 分支判断 12.16 年份问题 12.17 遍历思想 12.18 二进制 12.19 数位拆分 12.20 循环 12.21 质因数 第三周 12…

作者头像 李华
网站建设 2026/5/1 8:32:07

6、深入解析Apache服务器:从mod_perl到多守护进程配置

深入解析Apache服务器:从mod_perl到多守护进程配置 清理日志文件 在进行日志文件清理时,有一条命令可以清理所有日志文件。不过,在运行此命令之前,务必确保任何恢复所需的日志文件都已备份。 mod_perl简介 Perl是由Larry Wall编写的高级编程语言,它源自C语言,拥有众多…

作者头像 李华
网站建设 2026/4/30 7:57:54

14、Apache服务器安全与故障排除全解析

Apache服务器安全与故障排除全解析 1. MD5校验和与密码认证 目前,还没有人知道如何在不改变文件MD5校验和的情况下修改文件。研究人员仍在努力尝试破解MD5,并且取得了一定进展,但对于大多数应用来说,MD5仍然足够强大。 在密码认证方面,Apache可以通过mod_auth模块执行认…

作者头像 李华
网站建设 2026/5/1 8:19:19

碰一碰营销系统电脑端+手机端双端开发方案

双端功能互补:电脑端承担“系统配置数据复盘批量管理”重操作,手机端实现“轻量化运营实时监控现场调试”,覆盖商家从后台管理到前端落地全场景。数据实时同步:打通碰一碰营销系统双端数据库,确保NFC触发数据、内容分发…

作者头像 李华
网站建设 2026/5/1 7:24:54

基于STM32单片机快递柜储物柜扫码灯光消毒语音播报蓝牙无线APP/WiFi无线APP/摄像头视频监控/云平台设计S369

STM32-S369-存取柜光敏灯光消毒取件码二维码语音播报存件手机号录入后台数据4舵机OLED屏按键(无线方式选择)产品功能描述:本系统由STM32F103C8T6单片机核心板、OLED屏、(无线蓝牙/无线WIFI/无线视频监控/联网云平台模块-可选)、键盘部分、语音…

作者头像 李华
网站建设 2026/5/1 6:20:16

FLUX.1-Controlnet-Union新手配置指南

FLUX.1-Controlnet-Union新手配置指南:零基础搭建下一代文生图生成系统 在AI图像生成技术飞速演进的今天,FLUX.1系列模型凭借其革命性的Flow Transformer架构和强大的多模态控制能力,正迅速成为创意工作者与开发者的新宠。然而,面…

作者头像 李华