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

广东省建设部网站wordpress flickr

广东省建设部网站,wordpress flickr,邢台做网站多少钱,青岛进出口公司名单命令模式(Command Pattern)学习笔记 1. 模式定义 行为型设计模式,将请求封装为对象,使请求的发送者与接收者解耦。支持请求的排队、记录、撤销/重做等操作。 2. 适用场景 ✅ 需要将操作参数化 ✅ 需要支持事务操作&#xff08…

命令模式(Command Pattern)学习笔记

1. 模式定义

行为型设计模式,将请求封装为对象,使请求的发送者与接收者解耦。支持请求的排队、记录、撤销/重做等操作。

2. 适用场景

✅ 需要将操作参数化
✅ 需要支持事务操作(撤销/重做)
✅ 需要实现任务队列/线程池
✅ 需要记录操作历史
✅ 需要支持宏命令(命令组合)

3. 模式结构

knows
executes
creates
creates
«interface»
Command
+execute()
+undo()
Receiver
+action()
ConcreteCommand
-receiver: Receiver
-state
+execute()
+undo()
Invoker
-command: Command
+setCommand()
+executeCommand()
Client
+createCommand()

4. 核心角色

角色说明
Command命令接口,声明执行操作的抽象方法
ConcreteCommand具体命令,绑定接收者与动作,实现execute()方法
Receiver接收者,实际执行操作的对象
Invoker调用者,触发命令执行
Client创建具体命令并设置接收者

5. 代码示例

5.1 智能家居控制示例

// 接收者 - 灯光设备
class Light {public void on() {System.out.println("打开灯光");}public void off() {System.out.println("关闭灯光");}
}// 命令接口
interface Command {void execute();void undo();
}// 具体命令
class LightOnCommand implements Command {private Light light;public LightOnCommand(Light light) {this.light = light;}public void execute() {light.on();}public void undo() {light.off();}
}class LightOffCommand implements Command {private Light light;public LightOffCommand(Light light) {this.light = light;}public void execute() {light.off();}public void undo() {light.on();}
}// 调用者 - 遥控器
class RemoteControl {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);Command lightOff = new LightOffCommand(livingRoomLight);RemoteControl remote = new RemoteControl();remote.setCommand(lightOn);remote.pressButton();  // 打开灯光remote.setCommand(lightOff);remote.pressButton();  // 关闭灯光remote.pressUndo();    // 撤销操作(重新打开灯光)}
}

6. 模式变种

  1. 宏命令(组合命令)
class MacroCommand implements Command {private List<Command> commands = new ArrayList<>();public void add(Command cmd) {commands.add(cmd);}public void execute() {for (Command cmd : commands) {cmd.execute();}}public void undo() {for (int i = commands.size()-1; i >= 0; i--) {commands.get(i).undo();}}
}
  1. 事务性命令
class TransactionManager {private Stack<Command> history = new Stack<>();public void execute(Command cmd) {cmd.execute();history.push(cmd);}public void rollback() {while (!history.isEmpty()) {history.pop().undo();}}
}

7. 优缺点分析

✔️ 优点

  • 解耦请求发送者与接收者
  • 支持撤销/重做操作
  • 容易扩展新命令
  • 支持命令的组合(宏命令)
  • 支持请求排队与日志记录

缺点

  • 增加系统复杂度(每个操作都需要命令类)
  • 可能产生大量具体命令类
  • 需要管理命令的生命周期

8. 相关模式对比

模式目的关键区别
策略模式封装算法族关注算法选择,通常不可逆
观察者模式状态变化通知事件驱动,被动通知
备忘录模式状态保存与恢复关注对象状态保存
责任链模式请求传递处理多个对象处理请求

9. 实际应用案例

  • Java的Runnable接口(命令模式+线程池)
  • Swing的Action接口
  • 数据库事务管理
  • 操作系统的任务调度
  • 游戏开发中的输入处理
  • 文本编辑器的撤销/重做功能
  • Spring的JdbcTemplate(命令模式+模板方法)

10. 最佳实践建议

  1. 使用命令接口:保持命令的通用性
  2. 实现撤销机制:存储必要的状态信息
  3. 结合组合模式:实现宏命令功能
  4. 使用对象池:管理频繁创建的命令对象
  5. 添加日志功能:记录命令执行历史
  6. 支持异步执行:结合线程池实现
  7. 使用空对象模式:处理无操作命令(NullCommand)

11. 扩展应用(结合线程池)

// 命令接口(扩展支持异步)
interface AsyncCommand extends Command {Future<?> executeAsync(ExecutorService executor);
}// 具体命令实现
class FileBackupCommand implements AsyncCommand {private String filePath;public FileBackupCommand(String path) {this.filePath = path;}public void execute() {// 同步执行backup();}public Future<?> executeAsync(ExecutorService executor) {return executor.submit(this::backup);}private void backup() {System.out.println("备份文件: " + filePath);// 具体备份逻辑...}public void undo() {System.out.println("恢复备份: " + filePath);// 恢复逻辑...}
}// 使用示例
ExecutorService pool = Executors.newFixedThreadPool(2);
AsyncCommand cmd = new FileBackupCommand("data.db");
Future<?> task = cmd.executeAsync(pool);

🎮 设计原则体现

  1. 单一职责原则:命令对象只负责执行特定操作
  2. 开闭原则:新增命令无需修改现有代码
  3. 依赖倒置原则:调用者依赖抽象命令接口

通过命令模式,可以实现灵活的操作管理机制,特别适合需要支持事务操作、任务队列、撤销/重做等功能的场景。该模式在GUI编程和事务处理系统中应用广泛,是解耦操作请求与具体实现的经典解决方案。


文章转载自:

http://NZHfGIh7.kpgbz.cn
http://OWQiALlj.kpgbz.cn
http://XGvRzxNn.kpgbz.cn
http://ghYikL7B.kpgbz.cn
http://0CmpHfGa.kpgbz.cn
http://qDb4xGmL.kpgbz.cn
http://FiQSDAsA.kpgbz.cn
http://UwCLHlju.kpgbz.cn
http://OESrM4dp.kpgbz.cn
http://8H6rbMUd.kpgbz.cn
http://AusjREIZ.kpgbz.cn
http://38Y54PNB.kpgbz.cn
http://c3z667R4.kpgbz.cn
http://dHse5Cqu.kpgbz.cn
http://J2ON4Gy6.kpgbz.cn
http://cbL3IrDZ.kpgbz.cn
http://I55cYIVX.kpgbz.cn
http://AtA4ReTc.kpgbz.cn
http://5aP5MOrT.kpgbz.cn
http://L9OYynOo.kpgbz.cn
http://74fpC7Mw.kpgbz.cn
http://eEorUaDS.kpgbz.cn
http://I1Z9Fo3O.kpgbz.cn
http://5aFE18Yg.kpgbz.cn
http://fPUBgiHz.kpgbz.cn
http://0nyJCGrK.kpgbz.cn
http://QdnibtJW.kpgbz.cn
http://tCjApC1Y.kpgbz.cn
http://zlljS59H.kpgbz.cn
http://aNIJ2knO.kpgbz.cn
http://www.dtcms.com/wzjs/716415.html

相关文章:

  • 天津市做公司网站的公司网站登录页面模板 下载
  • 大型网站建设设备梁山有没有做企业网站的
  • 深圳电子网站建设html编程教程
  • 湖北网站建设搭建开发一个小程序游戏要多少钱
  • 番禺做网站费用wap网站生成app
  • 精神文明建设网站模板有没有专门做布料的网站
  • 网站信息内容建设管理37网游
  • 免费wap网站建设wordpress后台修改
  • 山西省建设银行网站苏州新海通网站建设
  • 下载吧网站整站源码网站做百度推广需要哪些条件
  • 国外扁平化网站设计欣赏河南做网站推广
  • 网站广告设计厦门手机建站
  • 丹徒网站建设包括哪些抖音代运营剧本
  • 南宁网站seo顾问广告牌设计模板
  • 手机网站建设制作注册个体工商户用于网站建设
  • wordpress建教学网站做一个微网站平台
  • 百度做个公司网站要多少钱摄影课程自学网站
  • 网站建设实验简单网页制作成品代码
  • 网站建设招聘岗位能免费建设网站吗
  • 太原免费静态网站制作淘淘乐网站建设
  • 中山 网站建设成都pc网站建设
  • 常用来做网站首业的是网站简介 更改
  • 拖拽建设网站源码珠海网站开发排名
  • 网站开发和网页制作中国化学工程第三建设有限公司
  • 莱州官方网站百度开户要多少钱
  • 网站优化说明照片制作相册
  • 做动态图表的网站网站建设公司网站模版
  • 网站建好了还需要什么维护后台管理系统界面
  • 手机app 网站建设做网站运营工资多少
  • 网站开发 自学做塑料的网站有哪些