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

鲜花外贸网站建设东莞网站建设哪家公司好

鲜花外贸网站建设,东莞网站建设哪家公司好,怎么做网站 白,淄博机关建设网站Java设计模式之命令模式详解 一、命令模式核心思想 核心目标:将请求封装为对象,使请求的发送者与接收者解耦。支持请求的排队、记录、撤销等操作,如同餐厅点餐系统:顾客(发送者)→ 订单(命令对…

Java设计模式之命令模式详解


一、命令模式核心思想

核心目标将请求封装为对象,使请求的发送者与接收者解耦。支持请求的排队、记录、撤销等操作,如同餐厅点餐系统:顾客(发送者)→ 订单(命令对象)→ 厨师(接收者)。


二、命令模式类图(Mermaid)

持有
调用
创建
创建
配置
Invoker
-command: Command
+setCommand(Command)
+executeCommand()
«interface»
Command
+execute()
+undo()
ConcreteCommand
-receiver: Receiver
-state
+execute()
+undo()
Receiver
+action()
Client

三、代码实现示例

1. 智能家居控制场景

// 接收者:灯光
class Light {private boolean isOn = false;public void turnOn() {isOn = true;System.out.println("灯光已打开");}public void turnOff() {isOn = false;System.out.println("灯光已关闭");}public boolean isOn() { return isOn; }
}// 命令接口
interface Command {void execute();void undo();
}// 具体命令:开灯
class LightOnCommand implements Command {private Light light;public LightOnCommand(Light light) {this.light = light;}public void execute() {light.turnOn();}public void undo() {light.turnOff();}
}// 调用者:遥控器按钮
class RemoteControlButton {private Command command;private Command lastCommand;public void setCommand(Command command) {this.command = command;}public void pressButton() {command.execute();lastCommand = command;}public void pressUndo() {if (lastCommand != null) {lastCommand.undo();lastCommand = null;}}
}// 客户端调用
public class Client {public static void main(String[] args) {Light livingRoomLight = new Light();Command lightOn = new LightOnCommand(livingRoomLight);RemoteControlButton button = new RemoteControlButton();button.setCommand(lightOn);button.pressButton();   // 输出:灯光已打开button.pressUndo();     // 输出:灯光已关闭}
}

四、模式优缺点分析

✅ 优势

  • 解耦请求者与执行者:发送者无需知道接收者细节
  • 支持高级操作:轻松实现撤销/重做、事务、队列等功能
  • 灵活扩展:新增命令无需修改已有代码
  • 组合命令:支持宏命令(批量执行)

❌ 缺点

  • 类数量增加:每个命令都需要单独类
  • 过度设计风险:简单操作可能不适用

五、典型应用场景

  1. GUI操作:菜单项点击事件处理
  2. 事务系统:数据库操作回滚
  3. 任务队列:线程池任务调度
  4. 宏命令:批量执行操作(如IDE快捷键)
  5. 游戏控制:角色动作的撤销/重做

六、Mermaid序列图(命令执行流程)

Client Invoker Command Receiver setCommand(Command) executeCommand() execute() action() Client Invoker Command Receiver

七、命令模式 vs 其他模式

对比模式核心区别
策略模式封装算法,行为可替换
职责链模式请求沿链传递直到被处理
备忘录模式保存对象状态用于恢复

八、高级应用技巧

1. 宏命令(批量操作)

class MacroCommand implements Command {private List<Command> commands = new ArrayList<>();public void add(Command cmd) {commands.add(cmd);}public void execute() {commands.forEach(Command::execute);}public void undo() {// 逆序执行撤销for (int i = commands.size()-1; i >=0; i--) {commands.get(i).undo();}}
}// 使用示例
MacroCommand partyMode = new MacroCommand();
partyMode.add(new LightOnCommand(light));
partyMode.add(new MusicPlayCommand(speaker));
partyMode.execute();  // 同时执行开灯和播放音乐

2. 命令历史记录(支持多级撤销)

class CommandHistory {private Stack<Command> history = new Stack<>();public void push(Command cmd) {history.push(cmd);}public Command pop() {return history.pop();}public void undoAll() {while (!history.isEmpty()) {history.pop().undo();}}
}

九、实际框架应用案例

1. Java Swing的Action接口

«interface»
Action
+actionPerformed(ActionEvent)
AbstractAction
+actionPerformed(ActionEvent)
JButton
+setAction(Action)

2. Spring的JdbcTemplate

// 命令模式变体:模板方法+回调命令
jdbcTemplate.execute(new ConnectionCallback<Object>() {public Object doInConnection(Connection conn) {// 执行SQL命令return null;}
});

十、常见问题解答

Q1:如何防止命令对象膨胀?

  • 使用Lambda表达式(Java 8+)
button.setCommand(() -> light.turnOn());

Q2:如何处理命令参数?

class DimLightCommand implements Command {private Light light;private int prevBrightness;private int newBrightness;public DimLightCommand(Light light, int brightness) {this.light = light;this.newBrightness = brightness;}public void execute() {prevBrightness = light.getBrightness();light.setBrightness(newBrightness);}public void undo() {light.setBrightness(prevBrightness);}
}

Q3:命令模式如何支持异步?

class AsyncCommand implements Command {private Command command;public void execute() {new Thread(command::execute).start();}
}

如果文章对您有帮助,请帮忙点关注支持一下吧,谢谢啦!

http://www.dtcms.com/wzjs/28765.html

相关文章:

  • 北京做兼职哪个网站百度首页入口
  • 用织梦建设网站怎么让百度收录我的网站
  • 智库建设网站方案google官网入口注册
  • 七台河网站建设营销推广的公司
  • 网站功能优化的方法百度关键词搜索排名查询
  • 高中文凭能学做网站吗google搜索中文入口
  • 潍坊网站建设多少钱西安百度seo推广
  • 东莞建网站今天重大国际新闻
  • 免费做四年级题的网站权重查询
  • 做ppt比较好的网站百度电脑版官网
  • 厦门三五互联可以做网站吗引擎搜索是什么意思
  • 玛迪做网站关键词云图
  • 售后服务规范网站建设北京环球影城每日客流怎么看
  • 官方网站建设市场营销策划方案书
  • 深圳品牌网站设计专家seo优化包括
  • 网站开发那个好怎么去做网络推广
  • 柳州网站建设找哪家windows优化大师可靠吗
  • 永久建站空间购买11月将现新冠感染高峰
  • 行业网站名录百度发布平台官网
  • 千素网站建设中国的搜索引擎有哪些
  • 多用户商城网站开发班级优化大师怎么加入班级
  • 郑州建网站的好处seo培训价格
  • 北京网站优化对策中国优化网
  • 大学生网站建设结题报告seo网站关键词排名快速
  • 重庆专业网站建设公司哪家好百度收录怎么查询
  • 国家疫情防控最新政策第十版深圳百度推广seo公司
  • 网站策划要遵循的原则中国婚恋网站排名
  • 黄岩城乡住房和建设局网站游戏优化是什么意思
  • 苏州企业管理咨询服务网站及搜索引擎优化建议
  • 德阳网站建设.comseo分析工具有哪些