Skip to content

命令模式

基础概念

什么是命令模式?

答案: 命令模式(Command Pattern)将请求封装成对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。

使用场景

  • 需要将请求调用者和请求接收者解耦
  • 需要支持撤销操作
  • 需要支持事务

优点

  • 降低耦合度
  • 易于扩展新命令
  • 支持撤销和恢复

缺点

  • 可能产生大量命令类

实现方式

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

// 接收者
public class Light {
    public void on() {
        System.out.println("灯打开");
    }

    public void off() {
        System.out.println("灯关闭");
    }
}

// 具体命令
public class LightOnCommand implements Command {
    private Light light;

    public LightOnCommand(Light light) {
        this.light = light;
    }

    @Override
    public void execute() {
        light.on();
    }

    @Override
    public void undo() {
        light.off();
    }
}

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

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

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

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

// 使用
Light light = new Light();
Command command = new LightOnCommand(light);
RemoteControl remote = new RemoteControl();
remote.setCommand(command);
remote.pressButton();  // 灯打开
remote.pressUndo();    // 灯关闭

练习题

  1. 命令模式和策略模式的区别?
  2. 如何实现宏命令?
  3. 命令模式的应用场景?

Released under the MIT License.