魔术桌
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • DesignPattern - 命令模式

文章摘要: 命令模式使用总结。

简介

简要说明

  • 命令模式(Command Pattern)是一种行为型设计模式。
  • 将请求的发送者和接收者解耦,发送者只需要知道如何发送请求,而不必知道请求的具体执行过程。

主要功能

  • 将请求封装成对象,允许用户对请求进行参数化。
  • 允许将请求对象放入队列中进行排队。
  • 支持可撤销的操作。
  • 可以添加新的命令类,不需要修改现有代码。

注意事项

  • 可能会导致系统中产生大量的命令类,增加了系统的复杂性。
  • 使用命令模式可能会导致某些请求的处理速度变慢。

适用场景

  • 当需要将发出请求的对象和执行请求的对象解耦时。
  • 当需要支持撤销操作时。
  • 当需要支持操作的日志记录和事务操作时。

Java 8

案例

// 命令接口,声明执行操作的方法
interface Command {
    void execute();
}

// 接收者类,真正执行命令的操作
class Light {
    public void turnOn() {
        System.out.println("Light is on");
    }

    public void turnOff() {
        System.out.println("Light is off");
    }
}

// 具体命令类,实现命令接口,并持有接收者对象
class TurnOnCommand implements Command {
    private Light light;

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

    @Override
    public void execute() {
        light.turnOn(); // 调用接收者的方法执行命令
    }
}

class TurnOffCommand implements Command {
    private Light light;

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

    @Override
    public void execute() {
        light.turnOff(); // 调用接收者的方法执行命令
    }
}

// 调用者类,负责调用命令对象执行请求
class RemoteControl {
    private Command command;

    // 设置命令
    public void setCommand(Command command) {
        this.command = command;
    }

    // 执行命令
    public void pressButton() {
        command.execute();
    }
}

// 客户端代码,使用命令模式
public class CommandPatternDemo {
    public static void main(String[] args) {
        Light light = new Light(); // 创建接收者对象

        Command turnOnCommand = new TurnOnCommand(light); // 创建具体命令对象
        Command turnOffCommand = new TurnOffCommand(light); // 创建具体命令对象

        RemoteControl remoteControl = new RemoteControl(); // 创建调用者对象

        remoteControl.setCommand(turnOnCommand); // 设置命令
        remoteControl.pressButton(); // 执行命令,开灯

        remoteControl.setCommand(turnOffCommand); // 设置命令
        remoteControl.pressButton(); // 执行命令,关灯
    }
}

注释

  • 在这个例子中,Command接口定义了一个execute方法,它将由具体的命令类实现。Light类是接收者,它包含实际执行操作的代码。TurnOnCommand和TurnOffCommand是具体的命令类,它们实现了Command接口,并持有Light对象。
  • RemoteControl类是调用者,它持有一个命令对象,并提供了一个方法pressButton来执行命令。
  • 客户端代码CommandPatternDemo创建了Light对象,并创建了两个命令对象TurnOnCommand和TurnOffCommand。然后,它创建了一个RemoteControl对象,并通过调用setCommand方法来设置命令,通过调用pressButton方法来执行命令。这样,客户端就可以通过调用者发送命令给接收者,而无需直接与接收者交互。
更新时间: 2025/10/3 17:56