设计模式——命令模式

Simulink开发项1000例实战专栏--实例17:基于 Simulink 的 BLDC 电机驱动系统的设计与实现 项目背景无刷直流电机(BLDC)因其高效、可靠、低维护的特点,广泛应用于电动汽车、无人机、工业自动化等领域。基于 Simulink 的 BLDC 电机驱动系统可以实现对电机的精确控制,包括速度控制、位置控制和转矩控制。通过仿真和测试,可以优化控制算法,提高系统的性能和可靠性。 阅读详情

COMMAND 命令

 

1、 意图

将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排列或记录请求日志,以及支持可撤销的操作。

2、 别名

动作(Action)、事务(Transaction)

3、 适用性

  • 抽象出呆执行的动作以参数化某对象。可以用语言中的回调(callback)函数表达这种参数化机制。Command模式是回调机制的一个面向对象的替代品。
  • 在不同的时刻指定、排列和执行请求。一个Command对象可以有一个与初始请求无关的生存期。如果一个请求的接收者可用一种与地址空间无关的方式表达,那么就可将负责请求的命令对象传给另一个不同的进程并在那儿实现该请求。
  • 支持取消操作。Command的Excute操作可在实施操作前将状态存储起来,在取消操作时这个状态用来消除该操作的影响。Command接口必须添加一个Unexecute操作,该操作取消上一次Execute调用的效果。执行的命令被存储在一个历史列表中。可通过向后和向前遍历这一列表并调用Unexecute和Execute来实现重数不限的“取消”和“重做”。
  •  支持修改日志。
  • 用构建在原来操作上的高层操作构造一个系统。这种结构在支持事务的信息系统中很常见。一个事务封装了对数据的一组变动。Command模式提供了对事务进行建模的方法。Command有一个公共的接口,使得你可以用一种方式调用所有的事务。同时该模式也易于添加新事务以扩展系统。

4、 结构


5、 参与者

Command

           ——声明执行操作的接口。

ConcreteCommand

           ——将一个接收者对象绑定于一个动作。

           ——调用接收者相应的操作,以实现Execute。

Client

           ——创建一个具体命令对象并设定它的接收者。

Invoker

           ——要求该命令执行这个请求。

Receiver

           ——知道如何实施与执行一个请求相关的操作。任何类都可能作为一个接收者。


6、 协作

  • Client创建一个ConcreteCommand对象并指定它的Receiver对象。
  • 某Invoker对象存储该ConcreteCommand对象。
  • 该Invoker通过调用Command对象的Execute操作来提交一个请求。如该命令是可撤销的,ConcreteCommand就在执行的Execute操作之前存储当前状态以用于取消该命令。
  • ConcreteCommand对象对调用它的Receiver的一些操作以执行该请求。

7、 效果

Command模式有以下效果:

1)  Command模式将调用操作的对象与知道如何实现该操作的对象解耦。

2)  Command是头等的对象。它们可像其他的对象一样呗操纵和扩展。

3)  你可将多个命令装配成一个复和命令。

4)  增加新的Command很容易,因为这无需改变已有的类。

8、 实现

1)  一个命令对象应达到何种智能程度;命令对象的能力可大可小,一个极端是它仅确定一个接收者和执行该请求的动作。另一个极端是它自己实现所有功能,根本不需要额外的接受对象。

2)  支持取消和重做;

3)  避免取消操作过程中的错误积累;

9、 代码示例

 Command

package com.examples.pattern.command;

/**   
* 命令接口,声明执行的操作    
*/
public interface Command {
	
	/**
	 * 执行命令对应的操作
	 */
	public void execute();

}
ConcreteCommand

package com.examples.pattern.command;

/**   
*  具体的命令实现对象  
*/
public class ConcreteCommand implements Command {
	
	/**
	 * 持有相应的接收者对象
	 */
	private Receiver receiver = null;
	
	

	/**
	 * 构造方法,传入相应的接收者对象
	 * @param receiver
	 */
	public ConcreteCommand(Receiver receiver) {
		this.receiver = receiver;
	}



	@Override
	public void execute() {
		receiver.action();
	}

}
Client

package com.examples.pattern.command;

public class Client {

	public void assemble(){
		//创建接收者
		Receiver receiver = new Receiver();
		//创建命令对象,设定它的接收者
		Command command = new ConcreteCommand(receiver);
		//创建Invoker,把命令对象设置进去
		Invoker invoker = new Invoker();
		invoker.setCommand(command);
		command.execute();
	}
	
	public static void main(String[] args) {
		Client client = new Client();
		client.assemble();
	}
	
	
}
Invoker

package com.examples.pattern.command;

/**   
* 调用者  
*/
public class Invoker {
	
	/**
	 * 持有命令对象
	 */
	private Command command = null;

	/**
	 * 设置调用持有者的命令对象
	 * @param command
	 */
	public void setCommand(Command command) {
		this.command = command;
	}
	
	public void runCommand(){
		//调用命令对象的执行方法
		command.execute();
	}
	

}
Receiver

package com.examples.pattern.command;

/**   
* 接收者对象   
*/
public class Receiver {

	/**
	 * 真正执行命令相应的操作
	 */
	public void action() {
		System.out.println("this is an anction");
	}

}


10、相关模式

Composite模式可被用来实现宏命令。

Memento模式可用来保持某个状态,命令用这一状态来取消它的效果。

 


QQ也能连接OpenClaw啦!手机QQ远程操控本地AI保姆级教程 2026年最新OpenClaw与QQ连接教程发布,支持手机远程操控本地AI。腾讯官方推出QQ Bot插件,无需服务器即可实现三步绑定。教程提供三种连接方案:新手首选的扫码连接(10分钟搞定)、稳定的QQ群机器人方案,以及公网接入方案。详细步骤包括版本更新、插件安装、扫码绑定和功能测试,并附常见问题解决方案。该功能让用户通过QQ指令即可实现文件整理、文档生成等电脑操作,真正实现"手机发指令,电脑自动干"。 阅读详情

相关推荐

FR4板材实战:用ADS 2023快速设计微带线低通滤波器(附Line-Cal计算技巧)

本文详细介绍了使用ADS 2023在FR4板材上设计1-3GHz微带线低通滤波器的工程技巧。通过Line-Cal工具快速计算微带线参数,解决FR4板材的介质损耗和阻抗匹配问题,提供从集总参数转换到分布参数的实用方法,并分享版图设计与实测验证的关键要点,帮助工程师高效完成射频滤波器设计。

omega的博客 713

解决Commands not found

PAHT的值被改了导致的Commands not found错误 将PATH的值设为默认值 /sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/home/username/bin     URL:http://forums.freebsd.org/archive/index.php/t-250...

HelloAnyones的博客 349

【FPGA的基础快速入门23--------OV5640摄像头VGA显示】

FPGA的基础学习--------OV5640摄像头VGA显示OV5640简介二级目录三级目录 OV5640简介 OV5640同OV7725一样,都是Omni Vision(豪威科技)公司生产的CMOS图像传感器。 OV5640支持更高的分辨率(500W像素)、采集速率,具有更高的图像处理性能,主要应用在手机、数码相机、电脑多媒体等领域。 OV5640支持LED补光、MIPI(移动产业处理器接口)输出接口和DVP(数字视频并行)输出接口选择、ISP(图像信号处理)以及AFC (自动聚焦控制)等功能。 OV

暮雨中的坚果的博客 7688

23种设计模式名称

java 23种设计模式

软件Java开发工程师 431

红外图像和可见光图像异源图像配准问题研究

本文旨在研究一种具有高准确率和鲁棒性的融合图像障碍物检测技术,通过把红外和可见光图像进行图像配准和融合,获取高质量的异源融合图像,根据融合图像的特点采用有效的障碍物检测算法,将图像中的障碍物准确检出。......

G_redsky的博客 1万+

Quartz定时任务调度框架中的Misfire策略实战解析

本文深入解析了Quartz定时任务调度框架中的Misfire(失火)处理策略。针对SimpleTrigger和CronTrigger两种常用触发器,详细对比了其各自的Misfire指令(如NowWithExistingCount、FireAndProceed等)的核心行为与适用场景,并提供了基于不同业务需求(如数据补跑、时间点敏感度)的实战选型指南,帮助开发者构建更健壮可靠的任务调度系统。

weixin_29250573的博客 76

Java设计模式-命令模式Command

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

老徐的博客只有干货 1479

2023年LitCTF web组wp

1、导弹迷踪2、1zjs3、php是世界上最好的语言!!4、Ping5、我Flag呢?7、作业管理系统8、Vim yyds10、这是什么?SQL!注一下!11、Flag点击就送!12、就当无事发生13、彩蛋。

m0_74160536的博客 1589

Java 实现命令(Command)模式

类图 public interface ICommand { void execute(); } public class ConcreteCommand implements ICommand { private Receiver receiver; public ConcreteCommand(Receiver receiver) { this.receiver = r

打渔还是晒网 —— stone 2932

【图像检测】基于MATLAB的火灾监测系统设计

1 简介 针对传统火灾监测系统对于大空间的室内场合和开阔的室外环境易失效的问题,提出了一种结合火灾火焰特征和烟雾特征来进行判断的数字图像型火灾监测算法.火焰颜色特征是基于RGB颜色模型中的R,G,B三基色分量和它们之间的关系来判断是否有火焰发生,烟雾模型特征是图像灰度化预处理后,基于HIS空间模型提取的,通过计算像素点与基准像素点之间距离D的大小来判断是否有火灾发生.对提出的算法进行MATLAB仿真,并和传统的基于五种算子的边缘检测算法提取火焰烟雾特征进行对比.实验结果表明,提出的火焰特征和烟雾特征提取算

qq_59747472的博客 2797

infercnv的实操

摘要: 博主在infercnv分析中遇到执行困难,外包服务不可靠(未按要求使用HMM方法)。通过优化策略(逐样本处理、精简细胞至1000个、固定随机种子)解决了运行问题,但HMM功能仍无法实现。最终参考Cell期刊标准设置阈值完成分析,后续将继续更新进展。该案例凸显了生物信息分析中自主优化的重要性。(150字)

xiaoyusang的博客 308

java报错--Property 'xxx' not found on type 包名.类名

https://blog.youkuaiyun.com/qq_26819733/article/details/78570756 版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.youkuaiyun.com/qq_26819733/article/details/78570756 ————————————————...

qq_31138647的博客 280

FANUC机器人_CRX协作机器人的开机和示教器的初始化设置基本步骤(二)

FANUC机器人_CRX协作机器人的开机和示教器的初始化设置基本步骤

Robot_PLC_HMI_Automation 2732

23种设计模式之命令模式(Command Pattern)

大家好,我是小威,24届毕业生,在一家满意的公司实习。命令模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。

小威的博客 2万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Java设计模式 Design Pattern:命令模式 Command Pattern

Java设计模式 Design Pattern:命令模式 Command Pattern 目的 Encapsulate a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support un...

ahch8077的博客 164

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

您的设计模式——命令模式【Command Pattern 】

今天讲命令模式,这个模式从名字上看就很简单,命令嘛,老大发命令,小兵执行就是了,确实是这个意思, 但是更深化了,用模式来描述真是是世界的命令情况。正在看这本书的你,我猜测分为两类:已经工作的和没有 工作的,先说没有工作的,那你为啥要看这本书,为了以后工作呗,只要你参加工作,你肯定会待在项目组,那 今天我们就以项目组为例子来讲述命令模式。 我是我们部门的项目经理,就是一个项目的头,在中国做项目

418

二十三种设计模式——命令模式(Command Pattern)

命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。 介绍 意图:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。 主要解决:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为...

也曾北风温柔以待 301

设计模式-命令模式-Command Pattern

创建一个命令接口,它包含执行操作的方法(如。

wesigj的博客 2031

秒懂设计模式之命令模式(Command Pattern)

[版权申明] 非商业目的注明出处可自由转载 博文地址:https://blog.youkuaiyun.com/ShuSheng0007/article/details/116035276 出自:shusheng007 设计模式汇总篇,一定要收藏: 永不磨灭的设计模式(有这一篇真够了,拒绝标题党) 文章目录概述类型难度定义使用场景UML实例第一步:声明一个命令接口 (Command)第二步:构建那些可以具体完成命令的角色(Receiver)第三步:构建各种具体命令(ConcreteCommand)第四步:构建命令的调.

ShuSheng007的程序人生 3321

设计模式教程:命令模式(Command Pattern)

将请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化,将请求排队或记录日志,以及支持撤销操作

遇见伯灵说的博客 2035

设计模式命令模式(CommandPattern)

核心模块:抽象命令类、具体命令类、命令接收者、调用者 所有代码请访问:git@code.aliyun.com:289804201/PatternLearn.git 使用场景:不知道请求的接收者,不知道请求的操作,主要封装不同的命令,可以使用这种松耦合的方式; 优点:低耦合度,新的命令很容易添加到系统,支持undo和redo操作,和命令队列; 缺点:如果命令过多导

didiao11300的专栏 267

【设计模式】命令模式(Command Pattern) 服务我要个火锅ru

目录 一.介绍 二.场景 三.实现 四.dome代码 一.介绍 命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。 意图:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。 主要解决:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这.

corleone_4ever的博客 270

23种设计模式——命令模式(Command Pattern)

本文介绍了23种经典设计模式之——命令模式(Command Pattern)的使用及说明

Meteors.的博客 688

设计模式之命令模式

命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。 结构 命令模式的主要角色有: 命令(Command):为所有命令声明了一个接口。调用命令对象的 execute()方法,就可以让接收者进行相关的操作。这个接口也具备一个 undo(...

weixin_44437403的博客 149

设计模式 命令模式(Command Pattern)

每个命令对象都可以记录其执行前后的状态,这样在需要撤销操作时可以恢复到之前的状态。例如,当用户点击一个按钮或选择一个菜单项时,可以创建一个命令对象来表示这个请求,然后在适当的时候执行该命令。可以将多个简单的命令组合成一个复合命令,这样就可以一次执行一系列操作。命令模式(Command Pattern)是一种行为设计模式,它把请求封装成对象,从而让你可以用不同的请求、队列或者日志来参数化其他对象。这个示例展示了命令模式的基本应用,通过将请求封装成对象,使得发送请求的对象和执行请求的对象之间松耦合。

ling_zhi_xin的博客 1586

设计模式(十五)——命令模式(Command Pattern)

命令模式(Command Pattern) 基本介绍 命令模式:将一一个请求封装为一一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。也称之为:动作Action模式、事务transaction模式。 命名模式使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活,实现解耦。 在命名模式中,会将一个请求封装为一个对象,以便使用...

Duktig的博客 369

Java设计模式——命令模式【Command Pattern】

Java设计模式、命令模式、Command Pattern

scorpio的博客 1039
上一篇: 设计模式——观察者
下一篇: 设计模式——迭代器
HingKwan
博客等级 码龄17年 51粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值