当前位置: 首页 > article >正文

命令模式-Command Pattern

什么是命令模式

命令模式是一种行为类设计模式,核心是将每种请求或操作封装为一个独立的对象,从而可以集中管理这些请求或操作,比如将请求队列化依次执行、或者对操作进行记录和撤销。

命令模式通过将请求的发送者(客户端)和接收者(执行请求的对象)解耦,提供了更大的灵活性和可维护性。

优点和应用场景

优点:

  • 解耦请求发送者和接受者,让系统更加灵活、可扩展
  • 由于每个操作都是一个独立的命令类,所以我们需要新增命令操作时,不需要改动现有代码。

命令模式典型的应用场景:

  • 系统需要统一处理多种复杂的操作,比如操作排队、记录操作历史、撤销重做等。
  • 系统需要持续增加新的命令、或者要处理复杂的组合命令(子命令),使用命令模式可以实现解耦

抽象命令

package test.pattern;

public interface Command {
    void execute();
}

具体命令

package test.pattern;

public class TurnOffCommand implements Command {
    private Device device;

    public TurnOffCommand(Device device) {
        this.device = device;
    }

    public void execute() {
        device.turnOff();
    }
}

package test.pattern;

public class TurnOnCommand implements Command {
    private Device device;

    public TurnOnCommand(Device device) {
        this.device = device;
    }

    public void execute() {
        device.turnOn();
    }
}

接收者

package test.pattern;

public class Device {
    private String name;

    public Device(String name) {
        this.name = name;
    }

    public void turnOn() {
        System.out.println(name + " 设备打开");
    }

    public void turnOff() {
        System.out.println(name + " 设备关闭");
    }
}

调用者

package test.pattern;

public class RemoteControl {
    private Command command;

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

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

测试

package test.pattern;

public class Client {
    public static void main(String[] args) {
        // 创建接收者对象
        Device tv = new Device("TV");
        Device stereo = new Device("Stereo");

        // 创建具体命令对象,可以绑定不同设备
        TurnOnCommand turnOn = new TurnOnCommand(tv);
        TurnOffCommand turnOff = new TurnOffCommand(stereo);

        // 创建调用者
        RemoteControl remote = new RemoteControl();

        // 执行命令
        remote.setCommand(turnOn);
        remote.pressButton();

        remote.setCommand(turnOff);
        remote.pressButton();
    }
}


http://www.kler.cn/a/500384.html

相关文章:

  • 单片机-定时器中断
  • 二进制编码 和 Base64编码
  • Linux 攻击Exploit编写
  • 针对数据库系统安全的漏洞扫描加固工具【WebSocket + MySQL】
  • awr报告无法生成:常见分析手段
  • jmeter使用说明
  • JAVA 冒泡排序算法
  • Notepad++上NppFTP插件的安装和使用教程
  • nvim 打造成可用的IDE(2)
  • 15.5 hana log_mode
  • 设计师选用什么电脑好?ToDesk云电脑性能强,1分钟包会
  • 【NLP】语言模型的发展历程 (1)
  • 基于单片机的智能楼宇门禁系统的设计
  • 《拉依达的嵌入式\驱动面试宝典》—计算机网络篇(二)
  • 计算机视觉算法实战——吸烟人员检测
  • 基于Springboot的社区医院管理系统【附源码】
  • Monorepo设置:新手指南
  • 【Word_笔记】Word的修订模式内容改为颜色标记
  • [人工智能自学] Python包学习-numpy
  • Unity热更新 之 Addressables(2) 本地/远端打包 流程测试
  • 【Powershell】Windows大法powershell好(二)
  • 个性化图书商城推荐系统 协同过滤余弦函数推荐图书 Springboot Vue Element-UI前后端分离