Java设计模式之行为型-命令模式 (Command)

ASP.NET MVC5 C# Entity Framework 连接 Oracle 数据库 ASP.NET MVC5 C# Entity Framework 连接 Oracle 数据库创建数据库安装 Entity Framework配置数据库连接字符串添加实体模型类添加数据库上下文类添加控制器类运行测试 创建数据库 创建【全局数据库名】为 demodb 的Oracle数据库,用 SYSTEM 用户连接成功后创建【用户名】为 DJIANG 的用户,并授予该用户 DBA 角色 安装 Enti... 阅读详情

👉文章示例代码👈

附链

你也可以在这些平台阅读本文:

定义

将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化。

四个角色

命令模式主要有以下四个角色:

  • 抽象命令类Command:声明执行操作的接口。
  • 具体命令类Concrete Command:是抽象命令类的具体实现类,持有接受者对象,同时通过调用接收者的功能来完成命令要执行的操作。
  • 接收者Receiver:执行命令功能的相关操作。
  • 调用者Invoker:拥有很多命令对象,并通过访问命令对象来执行相关请求,其不直接访问接收者。

场景示例

笔者女朋友在一家知识付费公司做人事兼老板助理,常常会接收到一些来自老板的工作安排。

笔者这里以此为例。假设这天下班,女朋友接到老板的以下几个工作安排:

  • 明早9点准时在公司公号上发布一篇xx的推文。
  • 上午和老板一起外出看讲座场地。
  • 安排明天下午两点的会议。

创建抽象命令类

/**
 * @author zhh
 * @description 抽象命令接口
 * @date 2020-03-02 16:31
 */
public interface Command {

    /**
     * 执行命令
     */
    void execute();
}

创建具体命令类

每一个具体的工作安排对应一个具体的命令类。

/**
 * @author zhh
 * @description 发送推文命令
 * @date 2020-03-02 16:33
 */
public class SendTweetsCommand implements Command {

    private Staff staff;

    public SendTweetsCommand(Staff staff) {
        this.staff = staff;
    }

    public void execute() {
        staff.sendTweets();
    }
}


/**
 * @author zhh
 * @description 看场地命令
 * @date 2020-03-02 16:37
 */
public class LookVenueCommand implements Command {

    private Staff staff;

    public LookVenueCommand(Staff staff) {
        this.staff = staff;
    }

    public void execute() {
        staff.lookVenue();
    }
}


/**
 * @author zhh
 * @description 安排会议命令
 * @date 2020-03-02 16:38
 */
public class AttendMeetingCommand implements Command {

    private Staff staff;

    public AttendMeetingCommand(Staff staff) {
        this.staff = staff;
    }

    public void execute() {
        staff.attendMeeting();
    }
}

创建接受者

/**
 * @author zhh
 * @description 接受者类
 * @date 2020-03-02 16:58
 */
public class Staff {

    private String name;

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

    /**
     * 发推文
     */
    public void sendTweets() {
        System.out.println(this.name + "早上9点准时在公司公号上发布一篇xx的推文");
    }

    /**
     * 看场地
     */
    public void lookVenue() {
        System.out.println(this.name + "上午和老板一起外出看讲座场地");
    }

    /**
     * 安排会议
     */
    public void attendMeeting() {
        System.out.println(this.name + "安排下午两点的会议");
    }
}

创建调用者

/**
 * @author zhh
 * @description 调用者类
 * @date 2020-03-02 16:43
 */
public class Boss {

    private List<Command> commandList = new ArrayList<Command>();

    /**
     * 添加命令
     * @param command 命令
     */
    public void addCommand(Command command) {
        commandList.add(command);
    }

    /**
     * 发送命令
     */
    public void sendCommands() {
        for (Command command : commandList) {
            command.execute();
        }
        commandList.clear();
    }
}

测试类及输出

/**
 * @author zhh
 * @description 测试类
 * @date 2020-03-02 16:48
 */
public class Test {

    public static void main(String[] args) {
        Staff staff = new Staff("亚萍");
        Command sendTweetsCommand = new SendTweetsCommand(staff);
        Command lookVenueCommand = new LookVenueCommand(staff);
        Command attendMeetingCommand = new AttendMeetingCommand(staff);

        Boss boss = new Boss();
        boss.addCommand(sendTweetsCommand);
        boss.addCommand(lookVenueCommand);
        boss.addCommand(attendMeetingCommand);

        boss.sendCommands();
    }
}

测试类的输出结果如下:

亚萍早上9点准时在公司公号上发布一篇xx的推文
亚萍上午和老板一起外出看讲座场地
亚萍安排下午两点的会议

类结构图

以上示例类的结构图如下所示

总结

适用场景

  • 当请求调用者和请求接受者需要解耦时,命令模式使得调用者和接受者不直接交互。
  • 需要抽象出等待执行的行为。

优点

  • 降低系统的耦合度。
  • 良好的扩展性。新增或者删除命令不会影响其他类。

缺点

对于每一个具体的操作都需要对应设计一个具体的命令类,这会导致类的数目的增加,增加系统的复杂性。

参考

解锁IPG Photonics SmartWeld系统,开启焊接新时代 SmartWeld 系统是 IPG Photonics 研发的一款先进的激光焊接解决方案,它隶属于自动化激光焊接系统类别 ,但却凭借一系列创新技术和独特设计,在众多同类产品中脱颖而出。该系统基于 IPG 在光纤激光技术领域的深厚积累,融合了先进的光束控制、智能监测和自动化控制等技术,旨在为工业制造提供高效、精准且稳定的焊接工艺。与传统激光焊接系统相比,SmartWeld 系统的独特之处首先体现在其光束控制技术上。它能够精确地调整激光束的能量分布、光斑大小和形状 ,以适应不同材料和焊接工艺的需求。 阅读详情

相关推荐

Windows下快速搭建Kettle开发环境:基于9.4.0.0版本的保姆级教程

本文提供Windows系统下Kettle 9.4.0.0开发环境的详细搭建指南,涵盖源码获取、Maven配置优化、高效编译及部署运行全流程。通过实战验证的步骤和常见问题解决方案,帮助数据工程师快速完成环境配置,提升ETL开发效率。

weixin_28829479的博客 334

【设计模式】命令模式

命令模式作用: 将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化; 对请求排队或者记录请求日志,以及支持可撤销的操作。 命令模式又称为动作(Action)模式或事务(Transaction)模式。 应用场景: (1)在不同的时间指定请求、将请求排队和执行请求。 (2)支持命令的撤销(Undo)操作和恢复(Redo)操作。 (3)支持修改日志,当系统崩溃时

yhl_jxy的博客 897

反激开关电源变压器设计实战:从理论到绕制的完整流程解析

本文详细解析了反激开关电源变压器的完整设计流程,从核心理论到实战绕制。文章以24W电源为例,手把手讲解如何根据输入输出电压、功率和频率等关键参数,计算匝比、峰值电流、电感量,并完成磁芯选择、匝数确定、气隙计算及线径选取。重点阐述了CCM模式下的设计要点与绕制工艺,旨在帮助工程师设计出稳定高效的反激变压器,避免常见陷阱。

weixin_29305313的博客 685

command模式 java,java设计模式-命令模式(Command)

定义命令模式属于对象的行为模式。命令模式又称为行动(Action)模式或者交易(Transaction)模式。命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。命令模式的结构命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分隔开,委派给不同的对象。每一个命令都是一个操作:请求的一方发出...

weixin_30959465的博客 445

Vue2项目实战:海康威视WEB无插件开发包V3.4从下载到多画面预览(附完整代码)

本文详细介绍了在Vue2项目中集成海康威视WEB无插件开发包V3.4实现多画面监控预览的完整实战方案。内容涵盖从开发包下载、Nginx代理配置、核心组件封装到多画面并发加载与性能优化的全流程,并提供了完整的代码示例,帮助开发者高效解决浏览器无插件播放与多路视频流加载的难题。

c7d8e9的博客 322

用SimaPro做碳足迹分析:手把手教你完成产品生命周期评估报告

本文详细介绍了如何使用SimaPro进行碳足迹分析,从软件安装到生命周期评估报告的完整流程。通过实战案例演示,帮助制造业企业、咨询机构和科研团队掌握产品生命周期评估(LCA)的核心技术,精准识别环境热点并优化决策,为可持续发展转型提供科学依据。

yhn45678901的博客 716

Java设计模式-命令模式Command

前者打开文本文件,后者保存文本文件。可以清楚地看到命令对象的功能:TextFileOperation 命令封装了打开和保存文本文件所需的所有信息,包括接收器对象、要调用的方法和参数(在这种情况下,不需要参数,但可以)。在我们的示例中,很明显,必须有一个额外的组件负责调用命令对象并通过命令的 execute() 方法执行它们。命令是一个对象,其作用是存储执行操作所需的所有信息,包括要调用的方法、方法参数和实现该方法的对象(称为接收器)。调用程序是一个对象,它知道如何执行给定的命令,但不知道命令是如何实现的。

老徐的博客只有干货 1480

游戏资源解包神器NSCB实战:手把手教你提取Switch游戏视频(nsm转MP4)

本文详细介绍了如何使用NSCB工具链从Switch游戏中提取nsm视频和hca音频资源,并将其转换为可编辑的MP4和MP3格式。通过NSC Builder、CriPakTools等工具的分步操作指南,帮助内容创作者高效获取游戏资源,同时提供音视频同步合成、批量处理等高级技巧,为创意素材制作提供完整解决方案。

weixin_29197835的博客 892

Java设计模式之命令(Command)模式

命令(Command)设计模式将一个请求封装成一个对象,从而允许我们使用不同的请求、队列或者日志来参数化其他对象,将请求的发起者与执行者解耦。

小虎哥的技术博客 501

高通拨号流程介绍

本文介绍了高通平台(如SDX55)中APSS(A7处理器)与ModEM(Q6处理器)间的通信机制。

四儿家的小祖宗的博客 1068

哨兵1号回波数据(L0级)包格式解析与成像参数提取

提取哨兵1号数据包的辅助数据、回波数据、定标数据。matlab代码在文末

3131

java add方法源程序,Java AddCommand.addFilepattern方法代码示例

import org.eclipse.jgit.api.AddCommand; //导入方法依赖的package包/类/*** Adds all the files of the specified directory in the local git repository* (git add .), then commits the changes (git commit .), and fin...

weixin_30662937的博客 426

MTK_android11_WIFI(内网)和4G(外网)共存

MTK_android11_WIFI(内网)和4G(外网)共存

王涛的博客 2449

设计模式(Design Pattern) - 行为型模式(Behavioral Pattern) - 命令模式(Command) - Java实现

设计模式(Design Pattern) - 行为型模式(Behavioral Pattern) - 命令模式(Command) 目的:达到命令的发出者和执行者之间解耦,实现请求和执行分开。一、说明: 1、Command 命令(接口); 2、Receiver 命令接收者; 3、MyCommand 命令.实现类; 4、Invoker 命令发送者。二、Java实现,代码如下: 1、Comm

Z 392

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Java设计模式 —— 【行为型模式】命令模式(Command Pattern) 详解

命令模式是一个行为模式,它是将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行存储、传递、调用、增加与管理。

知唔猪的博客 1459

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【Java教程】Day20-14 设计模式:行为型模式——命令模式(Command Pattern)

命令模式(Command Pattern)是一种行为型设计模式,它的核心思想是将请求封装为一个对象,从而使得客户可以通过不同的请求来对调用者进行参数化、排队或记录请求日志,甚至支持撤销操作。在本文中,我们将逐步实现并理解命令模式,探索它的使用场景及优势。

max202011161630的博客 543

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Java设计模式(十五)行为型- 命令模式Command Pattern(史上最全命令模式)与使用场景以及优缺点

命令模式

移动端开发与最新技术 477

设计模式之命令模式

是什么 命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。 关键角色 1、received 真正的命令执行对象 2、Command 3、invoker 使用命令对象的入口 应用场景: 在某些场合,比如要对行为进行"记录、撤销/重做、事务...

林木森的博客 212

JAVA设计模式:行为型-命令模式(Command)

本文转自: JAVA设计模式(15):行为型-命令模式(Command) 装修新房的最后几道工序之一是安装插座和开关,通过开关可以控制一些电器的打开和关闭,例如电灯或者排气扇。在购买开关时,我们并不知道它将来到底用于控制什么电器,也就是说,开关与电灯、排气扇并无直接关系,一个开关在安装之后可能用来控制电灯,也可能用来控制排气扇或者其他电器设备。开关与电器之间通过电线建立连接,如果开关打开,则电线通...

我飞故我在的专栏 624

【Java中23种面试常考的设计模式之命令模式(Command)---行为型模式】

接下来我们要进行学习的是:【Java中23种面试常考的设计模式之命令模式(Command)—行为型模式。Client–Main 创建一个具体命令对象并设定它的接收者。命令模式:请求以命令的形式封装在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。将”发出请求的对象”和”接收与执行这些请求的对象”分隔开来。好了,到这里【Java中23种面试常考的设计模式之命令模式(Command)—行为型模式】就结束了,23种设计模式持续更新汇总中。

Coder_ljw的博客 504

JAVA设计模式(15):行为型-命令模式(Command)

装修新房的最后几道工序之一是安装插座和开关,通过开关可以控制一些电器的打开和关闭,例如电灯或者排气扇。在购买开关时,我们并不知道它将来到底用于控制什么电器,也就是说,开关与电灯、排气扇并无直接关系,一个开关在安装之后可能用来控制电灯,也可能用来控制排气扇或者其他电器设备。开关与电器之间通过电线建立连接,如果开关打开,则电线通电,电器工作;反之,开关关闭,电线断电,电器停止工作。相同的开关可以通过不

The Best Or Nothing~ 1万+

JAVA SCRIPT设计模式--行为型--设计模式之Command命令模式(14)

用Command对象可很容易的实现菜单(Menu),每一菜单中的选项都是一个菜单项(MenuItem)类的实例。当用户选择了一个菜单项时,该MenuItem对象调用它的Command对象的Execute方法,而Execute执行相应操作。但工具箱 不能显式的在按钮或菜单中实现该请求,因为只有使用工具箱的应用知道该由哪个对象做哪 个操作。而工具箱的设计者无法知道请求的接受者或执行的操作。这一模式的关键是一个抽象的Command类,它定义了一个执行操作的接口。其最简单的形式是一个抽象的Execute操作。

火柴盒 391

JAVA设计模式(18) —<行为型>命令模式(Command)

1 定义: 命令模式(Command),别名为动作(Action)模式或事务(Transaction)模式 Encapsulate a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoabl

luckykapok918的专栏 1019

**命令模式(Command Pattern)** 的完整、清晰且结构化的总结,涵盖了角色职责、核心思想、适用场景和 Java 示例代码

📌 补充说明: - 若命令不可逆(如发送 HTTP 请求、删除文件),`undo()` 应抛出 `UnsupportedOperationException` 或实现补偿事务(如“删除”对应“从回收站恢复”)。 - 生产级系统常结合 **Command + Memento + Caretaker** 构建健壮撤销栈(尤其编辑类应用)。 - Java 中还可利用 `AutoCloseable` 或 try-with-resources 模拟命令生命周期,但非标准做法。

[Blog][Domain] programb.blog.youkuaiyun.com 542

【西瓜带你学设计模式 | 第十八期 - 命令模式】命令模式 —— 请求封装与撤销实现、优缺点与适用场景

本文讲解了命令模式将请求封装为对象,解耦调用方与执行方,支持执行、撤销、排队、日志与宏命令组合,适用于需操作管理、事务与可撤销的业务场景。

无籽西瓜a的博客 505

23种设计模式之【命令模式】-核心原理与 Java 实践

命令模式是 23 种设计模式中的一种行为型模式,其核心思想是将请求封装为一个对象(命令),从而使你可以用不同的请求对客户进行参数化,并且支持请求的排队、记录日志、撤销等操作。,将发出请求的责任和执行请求的责任分割开,通过命令对象连接两者。遥控器(调用者)可执行各种命令(开 / 关灯光、开 / 关电视)知道如何执行与请求相关的操作,是实际业务逻辑的执行者。实现命令接口,持有接收者(Receiver)的引用。持有命令对象,负责触发命令的执行。不关心命令的具体实现和接收者是谁。与命令解耦,不关心命令的存在。

学习 记录 总结 分享 548
上一篇: Java设计模式之行为型-备忘录模式 (Memento)
下一篇: Java设计模式之行为型-中介者模式 (Mediator)
黑豪Horace
博客等级 码龄10年 85粉丝 74原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值