模式介绍

命令模式是一种行为型设计模式,它将请求封装为一个对象,从而使您可以用不同的请求对客户进行参数化。命令模式支持请求排队、记录日志、撤销/重做等操作。

使用场景

  • 当您需要将请求发送者和接收者解耦时
  • 当您需要支持命令的排队执行、记录日志、撤销/重做等操作时
  • 当您需要支持宏命令(一组命令)时

代码示例

// 命令接口
public interface Command {
    void execute();
    void undo();
}

// 具体命令
public class ConcreteCommand implements Command {
    private Receiver receiver;

    public ConcreteCommand(Receiver receiver) {
        this.receiver = receiver;
    }

    @Override
    public void execute() {
        receiver.action();
    }

    @Override
    public void undo() {
        receiver.undo();
    }
}

// 调用者
public class Invoker {
    private Command command;

    public void setCommand(Command command) {
        this.command = command;
    }

    public void executeCommand() {
        command.execute();
    }

    public void undoCommand() {
        command.undo();
    }
}

优缺点

优点

  • 降低了系统的耦合度
  • 新的命令可以很容易地加入到系统中
  • 可以比较容易地设计一个命令队列和宏命令

缺点

  • 使用命令模式可能会导致某些系统有过多的具体命令类
  • 命令模式的结果实际上就是调用接收者的一个方法
  • 命令模式可能会增加系统的复杂度