[设计模式]命令模式(Command)

汇编语言(第4版)王爽 课程设计2 详细实现(一、虚拟模式DOS运行篇) 由于虚拟模式的限制,我们编写的许多逻辑暂时不能被检验,而因为《汇编语言》编写时间较早,其所依赖的运行环境如今只能够依靠虚拟机来搭建。比如实模式DOS,搭建步骤比较繁琐,因此我将其它的部分放在下一篇文章中进行讲解。事实上,我们实现的程序属于《汇编语言》课程设计2中任务程序部分,其中的完整任务还涉及到将该任务程序安装到软盘等操作,这些也都需要在实模式下才能运行,所以统一放到下一篇文章进行实现。 阅读详情

1.意图

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

2.动机

       有时必须向某对象提交请求,但并不知道关于被请求的操作或请求的接受者的任何信息。例如,用户界面工具箱包括按钮和菜单这样的对象,它们执行请求响应用户输入。但工具箱不能显示地在按钮或菜单中实现该请求,因为只有使用工具箱的应用知道该由哪个对象做哪个操作。而工具箱的设计者无法知道请求的接受者或执行的操作。

       命令模式通过将请求本身变成一个对象来使工具箱对象可向未指定的应用对象提出请求。这个对象可被存储并像其他的对象一样被传递。这一模式的关键是一个抽象的Command类,它定义了一个执行操作的接口。其最简单的形式是一个抽象的Execute操作。具体的Command子类将接收者作为其一个实例变量,并实现Execute操作,指定接受者采取的动作。而接受者有执行该请求所需的具体信息。

3.结构与参与者

4.效果

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

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

       3)可以将多个命令装配成一个复合命令。一般来说,复合命令是Composite模式的一个实例。

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

5.实现

       我还没有见过一定的例子,暂时不写这一块。

6.代码示例

#include <iostream>
#include <string>
#include <vector>
using namespace std;

//烤肉师傅
class Barbucer
{
public:
	void MakeMutton()
	{
		cout<<"烤羊肉"<<endl;
	}
	void MakeChickenWing()
	{
		cout<<"烤鸡翅膀"<<endl;
	}
};

//抽象命令类
class Command
{
protected:
	Barbucer* receiver;
public:
	Command(Barbucer* temp)
	{
		receiver = temp;
	}
	virtual void ExecuteCmd()=0;
};

//烤羊肉命令
class BakeMuttonCmd : public Command
{
public:
	BakeMuttonCmd(Barbucer* temp) : Command(temp){}
	virtual void ExecuteCmd()
	{
		receiver->MakeMutton();
	}
};

//烤鸡翅
class ChickenWingCmd : public Command
{
public:
	ChickenWingCmd(Barbucer* temp) : Command(temp){}

	virtual void ExecuteCmd()
	{
		receiver->MakeChickenWing();
	}
};

//服务员类
class Waiter
{
protected:
	vector<Command*> m_commandList;
public:
	void SetCmd(Command* temp)
	{
		m_commandList.push_back(temp);
		cout<<"增加定单"<<endl;
	}

	//通知执行
	void Notify()
	{
		vector<Command*>::iterator p=m_commandList.begin();
		while(p!=m_commandList.end())
		{
			(*p)->ExecuteCmd();
			p++;
		}
	}
};

//客户端
int main()
{
	//店里添加烤肉师傅、菜单、服务员等顾客
	Barbucer* barbucer=new Barbucer();
	Command* cmd= new BakeMuttonCmd(barbucer);
	Command* cmd2=new ChickenWingCmd(barbucer);
	Waiter* girl = new Waiter();
    //点菜
	girl->SetCmd(cmd);
	girl->SetCmd(cmd2);
    //服务员通知
	girl->Notify();
	return 0;
}


 

卸载重装Ubuntu22.04双系统 先说一下写此篇文章的背景吧,我在Windows下配置了三个cornerNet深度学习环境分别是cuda10.3(显卡版本太高不支持),cuda11.3(配置后偶然看到一篇说这个版本win下只能用CPU跑),最后是cuda11.1终究还是没能跑通代码,因为它的代码是在Liunx系统写的,就想着装个Ubuntu试试看,在网上看说一般软件不要装太高版本,我就下载了470版的显卡驱动,跟着步骤升级了系统内核,结果第二天开机Ubuntu就崩了,开机黑屏左上角只有一道横杠显示,只能按ctrl+shift+f5进入命令窗 阅读详情

相关推荐

基于CNN对抗嵌入的图像隐写——CNN-Based Adversarial Embedding for Image Steganography

CNN-Based Adversarial Embedding for Image Steganography https://ieeexplore.ieee.org/abstract/document/8603808 这篇论文发表在TIFS( IEEE TRANSACTIONS ON INFORMATION FORENSICS AND SECURITY),TIFS是网络与信息安全领域的国际两大顶级期刊之一,中国计算机学会(CCF)推荐的A类期刊,SCI一区TOP期刊,目前影响因子有7多了。 1 概

weixin_48654804的博客 2278

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的博客 163

深入浅出:CosineLRScheduler 调度器的原理与实战应用

本文深入解析了CosineLRScheduler调度器的核心原理与实战应用,详细介绍了余弦退火算法及其在深度学习模型训练中的优势。通过参数配置建议、PyTorch实现示例和常见问题解决方案,帮助开发者高效应用该调度器提升模型性能,特别适用于计算机视觉和自然语言处理任务。

sss66的博客 859

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

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

ShuSheng007的程序人生 3321

【Cadence】 ADS Dynamic Link使用教程

在Cadence617上使用ADS Dynamic Link

乾巽的博客 6072

智能制造 | 如何快速自动生成站位表及自动与BOM校验?

一、站位表(SMT行业中)是SMT上料防错的基础信息,用于对需上料物料与产线、贴片机位置、飞达规格型号、用量,建立基础资料。 SMT站位表是否正确? 首先需要人工确认站位表与SMT程序的是否符合,上料员依照站位表安装好后,确认人员需有第三方确认者 (品管确定)核对。 站位表内容包括什么? 站位表内容为:SMT站位号相对应的物料编码,元件位号,飞达大小/间距,数量等等,根据不同公司的要求而定义。 就目前来说,基本每一款贴片机都可以输出站位清单 但对于企业来说,直接输出的站位清单一般不直接使用,需要进行手动处理

vayoinfo111的博客 4942

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

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

小威的博客 2万+

QT实现串口通信

要实现串口通信,需要知道串口通信需要的信息 主要参数有:波特率、校验位、数据位、停止位、控制流 主要操作有:串口的打开和关闭、刷新设备串口、接发数据、开关显示灯等。 实现效果如图: 最后附赠完整源码。 第一步:在头文件中引入 QtSerialPort 类的两个头文件(必须引入) // 引入串口通信的两个头文件(第一步) #include <QtSerialPort/QSerialPort> // 提供访问串口的功能 #include <QtSerialPo

m0_49456900的博客 6万+

[Design Pattern] Command Pattern 命令模式

发现公司的代码好像有用到 Command Pattern,回顾重温下。 Command Pattern 的类图结构如下: 参考 《Head First Design Patterns(英文版)》P245 绘制 我所理解的 Command Pattern 如图。 caller, action, subject 分别对于类图中的 Invoker, Command, ...

QQ562224896的博客 138

边表法

边表法是用来绘制填充一个面的,边表法的关键是边表和连接边表的扫描线。 对于边的描述利用边表数据结构,包含边与扫描线的交点x坐标,边的最大y坐标,这样可以知道边加入到哪些扫描线上,便还有一个指针来记录扫描线上其它边。 //边数据结构 #pragma once #ifndef __CAETZ__ #define __CAETZ__ #include "pch.h" #include "CPoin...

weixin_42376458的博客 2101

1、使用Spark SQL查询Databricks:全面指南

本博客全面介绍了如何使用Spark SQL在Databricks平台上进行高效的数据查询与分析。内容涵盖SQL基础操作、数据过滤、复杂查询技巧、简单与高级计算、数据聚合、日期处理等核心主题,适合数据分析师、开发人员及SQL学习者。通过逐步讲解和实用示例,帮助读者掌握从入门到高级的SQL技能,并提供学习路径建议和免费代码资源,助力实际数据分析工作。

redis7keeper的博客 90

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

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

wesigj的博客 2031

AI 实战篇 |基于 AI开放平台实现 人脸识别对比 功能,超详细教程【附带源码】

本篇文章来学习一下怎样使用 Unity实现简单地人脸识别 功能。 关于人脸识别,我们可以选择很多平台的SDK接入Unity来实现人脸识别的功能。

努力前行,总会成为自己心中的那道光 5万+

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

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

Duktig的博客 369

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

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

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

/** * 命令模式。 * @author Bright Lee */ public class CommandPattern { public static void main(String[] args) { Receiver receiver = new Receiver(); Command cmd001 = new OnCommand(receiver); C...

look4liming的专栏 273

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

设计模式之命令模式详解(Command Pattern)

在软件开发系统中,常常出现“方法的请求者”与“方法的实现者”之间存在紧密的耦合关系。这不利于软件功能的扩展与维护。例如,想对行为进行“撤销、重做、记录”等处理都很不方便,因此“如何将方法的请求者与方法的实现者解耦?”变得很重要,命令模式能很好地解决这个问题。 在现实生活中,这样的例子也很多,例如,电视机遥控器(命令发送者)通过按钮(具体命令)来遥控电视机(命令接收者),还有计算机键盘上的“功能键”...

Superman_peng的博客 398

STM32F407中文手册

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

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

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

Meteors.的博客 688

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

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

遇见伯灵说的博客 2035

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

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

scorpio的博客 1039

设计模式(Design pattern)之命令模式(Command Pattern)

命令模式是一种行为型设计模式,通过将请求封装为对象来实现参数化客户端操作。本文以餐厅点餐为例,展示了命令模式的具体实现:Order类封装订单信息,Cook类作为命令执行者,Waiter类作为调用者,Command接口定义执行方法。OrderCommand实现类将订单和厨师关联,当服务员调用sayOrder()时,会依次执行所有命令对象,触发厨师制作菜品。这种模式实现了请求发送者和接收者的解耦,支持命令的排队、记录和撤销操作。示例中01桌和02桌的订单被封装为命令对象,由服务员统一触发执行,演示了命令模式在实

RR1335 之代码才是动力源 236

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

命令模式(Command Pattern)是一种行为设计模式,它允许将请求封装成对象,从而使你可以参数化其他对象对请求的执行。在命令模式中,请求的发送者和接收者之间不直接交互,而是通过一个命令对象来解耦。这使得请求发送者无需知道请求的具体操作或者接收者,从而增强了系统的灵活性和可扩展性。

weixin_44435110的博客 2001

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

文章目录一、概念二、命令模式的UML类图三、命令模式的应用实例:智能家电项目3.1、项目介绍3.2、项目UML类图3.3、代码3.3.1、 Command(命令):Command3.3.2、Receiver(接收者):LightReceiver3.3.3、ConcreteCommand(命令的实现类):3.3.4、Invoker(请求者): RemoteController3.3.5、Client...

猎人在吃肉 773

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

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

ling_zhi_xin的博客 1586

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

命令模式是一种将请求封装为对象的行为设计模式,实现请求与执行的解耦。它通过创建包含执行逻辑的命令对象,支持请求的存储、传递、排队和撤销功能。该模式适用于需要延迟执行、撤销操作、任务队列或日志回放的场景,如GUI操作、事务管理等。虽然会增加代码复杂度(每个命令需单独类),但提供了灵活控制请求执行的能力。核心思想是将方法调用转化为可操作的对象,使请求成为系统中的一等公民。

goodparty的专栏 894

设计模式(行为型模式)之:命令模式(Command Pattern)

命令模式是一个高内聚的模式,其定义为:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请 求排队或者记录请求日志,可以提供命令的撤销和恢复功能。Receiver接受者角色:该角色就是干活的角色,命令传递到这里是应该被执行的Command命令角色:需要执行的所有命令都在这里声明Invoker调用者角色:接收到命令,并执行命令命令模式的意图是将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。

u013921164的博客 4581
上一篇: [设计模式]桥接模式(Bridge)
下一篇: [设计模式]责任链模式(Chain of Resposibilty)
sicofield
博客等级 码龄18年 169粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值