设计模式-21章(命令模式)


第二十一章 命令模式

命令模式(Command Pattern)是一种行为设计模式,其目的是将请求封装成对象,以便参数化其他对象,并在不同的请求、队列或者日志中对请求参数化和传递。它允许将客户端与接收者对象解耦。

以下是命令模式的一些关键角色:

  1. 命令(Command): 定义了执行操作的接口,通常包括 execute 方法。

  2. 具体命令(ConcreteCommand): 实现了命令接口,持有执行命令所需的具体操作。

  3. 调用者(Invoker): 负责调用命令对象执行请求,它不直接执行操作,而是通过命令对象委托给具体的接收者。

  4. 接收者(Receiver): 知道如何实施与执行一个请求相关的操作。

  5. 客户端(Client): 创建命令对象并设置其接收者。

下面是一个简单的命令模式的示例,以一个遥控器控制家电设备为例:

// 1. 命令接口
interface Command {
    void execute();
}

// 2. 具体的命令:开灯
class LightOnCommand implements Command {
    private Light light;

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

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

// 3. 接收者:电灯
class Light {
    void turnOn() {
        System.out.println("Light is ON");
    }
}

// 4. 调用者:控制中心
class RemoteControl {
    private Command command;
    
    //设置遥控命令
    void setCommand(Command command) {
        this.command = command;
    }

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

// 5. 客户端
public class CommandPatternExample {
    public static void main(String[] args) {
        Light light = new Light();
        LightOnCommand lightOnCommand = new LightOnCommand(light);
        RemoteControl remoteControl = new RemoteControl();

        //设置遥控命令
        remoteControl.setCommand(lightOnCommand);
        remoteControl.pressButton();
    }
}

在这个例子中,Command 接口定义了 execute 方法。LightOnCommand 类实现了这个接口,持有一个 Light 对象,并在 execute 方法中调用 LightturnOn 方法。Light 类是接收者,它知道如何执行打开灯的操作。RemoteControl 类是调用者,它通过 setCommand 方法设置具体的命令,并通过 pressButton 方法调用命令的 execute 方法,从而触发灯的打开操作。

这个例子展示了命令模式的基本结构,并且在实际应用中,可以通过添加新的命令类轻松地扩展系统。


文章作者: 念心卓
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 念心卓 !
  目录