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

【玩转23种Java设计模式】行为型模式篇:命令模式

软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。

汇总目录链接:【玩转23种Java设计模式】学习目录汇总整理

文章目录

  • 一、简介
  • 二、实例
    • 1、命令接口(Command)
    • 2、灯(Light)
    • 3、打开灯的命令(LightOnCommand)
    • 4、关闭灯的命令(LightOffCommand)
    • 5、遥控器(RemoteControl)
    • 6、客户端(CommandPatternExample)
  • 三、总结
    • 1、优点
    • 2、缺点
    • 3、应用场景

一、简介

  命令模式(Command Pattern)是一种行为型设计模式,它将请求封装成对象,从而使得可以使用不同的请求、队列或日志来参数化其他对象,同时支持可撤销的操作。该模式的核心是将“请求”抽象为独立的对象,这样可以更灵活地设计系统的各个模块。

主要角色:

  • Command(命令接口):定义命令执行的接口。
  • ConcreteCommand(具体命令类):实现命令接口,绑定一个接收者并实现具体的动作。
  • Invoker(调用者):持有命令对象并触发执行。
  • Client(客户端):创建命令对象并设置其接收者和调用者。

二、实例

例如:模拟智能家居中的灯光控制场景。

1、命令接口(Command)

interface Command {
    void execute();
    void undo();
}

2、灯(Light)

class Light {
    public void on() {
        System.out.println("The light is ON.");
    }

    public void off() {
        System.out.println("The light is OFF.");
    }
}

3、打开灯的命令(LightOnCommand)

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();
    }
}

4、关闭灯的命令(LightOffCommand)

class LightOffCommand implements Command {
    private Light light;

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

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

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

5、遥控器(RemoteControl)

class RemoteControl {
    private Command command;

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

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

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

6、客户端(CommandPatternExample)

public class CommandPatternExample {
    public static void main(String[] args) {
        Light livingRoomLight = new Light();

        Command lightOn = new LightOnCommand(livingRoomLight);
        Command lightOff = new LightOffCommand(livingRoomLight);

        RemoteControl remote = new RemoteControl();

        // 打开灯
        remote.setCommand(lightOn);
        remote.pressButton();

        // 撤销操作
        remote.pressUndo();

        // 关闭灯
        remote.setCommand(lightOff);
        remote.pressButton();

        // 撤销操作
        remote.pressUndo();
    }
}

三、总结

1、优点

  • 解耦请求与实现:命令模式将请求的发送者和接收者解耦,使得发送者无需知道接收者的具体实现。
  • 支持撤销与重做:通过在命令类中添加撤销逻辑,可以轻松实现撤销和重做功能。
  • 灵活扩展:可以很方便地新增命令,而不需要修改现有代码。

2、缺点

  • 命令类较多:对于每一个具体操作都需要一个命令类,增加了类的数量和系统复杂性。
  • 请求链复杂:如果命令链较长,可能会导致请求的跟踪和管理变得困难。

3、应用场景

  • 事务性操作:例如数据库操作的撤销和重做。
  • 任务队列系统:将操作排队执行,例如打印队列、任务调度。
  • GUI开发:按钮的点击事件可以通过命令模式封装。
  • 日志记录:记录每个命令的执行,便于系统回滚或重做操作。

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

相关文章:

  • Python判别不同平台操作系统调用相应的动态库读写NFC
  • 概率论与数理统计
  • 大数据技术-Hadoop(三)Mapreduce的介绍与使用
  • 解决vue-i18n在非.vue文件中,在其他js文件中无法使用的问题
  • default、delete 和 explicit
  • win11 vs2022 opencv 4.10 camshift示例程序运行
  • 二十三种设计模式-单例模式
  • FQ-GAN代码解析
  • HarmonyOS-面试整理
  • Day2 微服务 网关路由转发、网关登录校验、配置管理
  • 小程序基础 —— 07 创建小程序项目
  • 基于Flask后端框架的均值填充
  • 计算机毕业设计Python+Spark考研预测系统 考研推荐系统 考研数据分析 考研大数据 大数据毕业设计 大数据毕设
  • Maven的依赖Scope详细解释
  • UE4_用户控件_9_用按钮来控制播放动画
  • 评估可视化大屏效果除了震撼外,还有哪些衡量标准。
  • 20道Redis面试题核心技术知识点
  • 如何利用PEST分析法提升企业在行业竞争中的战略地位?
  • 【AR的手势识别算法有哪些】
  • 用户界面的UML建模07
  • C# 中 `new` 关键字的用法
  • 【超好用远程工具】跨平台SSH工具WindTerm免费开源
  • 25考研总结
  • Apache Commons Pool :介绍与使用
  • 再见24你好25
  • 计算机网络500题2024-2025学年度第一学期复习题库(选择、判断、填空)