命令设计模式

Java命令模式分析

命令模式是一种行为型设计模式,它将请求封装为独立对象,实现请求发送者与接收者的解耦。以下是核心分析:

核心结构
  1. 命令接口(Command)

    声明执行操作的通用方法:

    java 复制代码
    public interface Command {
        void execute();
    }
  2. 具体命令(ConcreteCommand)

    实现命令接口,关联接收者对象:

    java 复制代码
    public class LightOnCommand implements Command {
        private Light light;  // 接收者对象
        
        public LightOnCommand(Light light) {
            this.light = light;
        }
        
        @Override
        public void execute() {
            light.turnOn();  // 调用接收者方法
        }
    }
  3. 调用者(Invoker)

    触发命令执行:

    java 复制代码
    public class RemoteControl {
        private Command command;
        
        public void setCommand(Command command) {
            this.command = command;
        }
        
        public void pressButton() {
            command.execute();  // 执行命令
        }
    }
  4. 接收者(Receiver)

    实际执行操作的对象:

    java 复制代码
    public class Light {
        public void turnOn() {
            System.out.println("Light is ON");
        }
    }
优势分析
  1. 解耦性:调用者无需知道接收者细节
  2. 可扩展性:新增命令不影响现有结构
  3. 复合命令:支持宏命令(命令组合)
  4. 撤销/重做:通过记录命令历史实现
适用场景
  • 需要回调机制的系统
  • 需要实现操作队列的场景
  • 需要支持事务/撤销的操作
  • GUI事件处理(如按钮点击)
代码示例
java 复制代码
// 客户端使用
public class Client {
    public static void main(String[] args) {
        Light light = new Light();  // 接收者
        Command lightOn = new LightOnCommand(light);
        
        RemoteControl remote = new RemoteControl();  // 调用者
        remote.setCommand(lightOn);
        remote.pressButton();  // 输出: Light is ON
    }
}
模式变体
  1. 带状态命令 :增加unexecute()实现撤销

  2. 组合命令 :实现命令批处理

    java 复制代码
    public class MacroCommand implements Command {
        private List<Command> commands = new ArrayList<>();
        
        public void add(Command cmd) {
            commands.add(cmd);
        }
        
        @Override
        public void execute() {
            commands.forEach(Command::execute);
        }
    }

该模式通过将操作请求对象化,实现了调用操作与具体实现的分离,符合开闭原则,是GUI框架和事务系统的核心设计范式。

相关推荐
jiankeljx6 分钟前
Java实战:Spring Boot application.yml配置文件详解
java·网络·spring boot
cyforkk8 分钟前
Java 开源项目指南:如何规范地发布首个 GitHub Release
java·开源·github
qqty12178 分钟前
Java进阶学习之路
java·开发语言·学习
是苏浙14 分钟前
初识集合框架
java·数据结构
Zzxy16 分钟前
Spring Boot 参数校验
java·spring boot
黑眼圈子22 分钟前
总结一下用Java做算法的常用类和方法
java·开发语言·算法
Magic--33 分钟前
深入解析管道:最基础的进程间通信(IPC)实现
java·服务器·unix
架构师沉默1 小时前
为什么国外程序员都写独立博客,而国内都在公众号?
java·后端·架构
带刺的坐椅1 小时前
SolonCode v2026.4.1 发布(比 ClaudeCode 简约的编程智能体)
java·ai·llm·agent·solon-ai·claudecode·soloncode
殷紫川1 小时前
从单体到亿级流量:登录功能全场景设计指南,踩过的坑全给你填平了
java