首页 > 其他分享 >COMMAND(命令)—对象行为型模式

COMMAND(命令)—对象行为型模式

时间:2025-01-11 19:00:50浏览次数:3  
标签:请求 对象 子类 接收者 模式 命令 COMMAND 一个 操作

1. 意图
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。
2. 别名
动作( A c t i o n ),事务( Tr a n s a c t i o n )
3. 动机
有时必须向某对象提交请求,但并不知道关于被请求的操作或请求的接受者的任何信息。例如,用户界面工具箱包括按钮和菜单这样的对象,它们执行请求响应用户输入。但工具箱不能显式的在按钮或菜单中实现该请求,因为只有使用工具箱的应用知道该由哪个对象做哪个操作。而工具箱的设计者无法知道请求的接受者或执行的操作。

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

用C o m m a n d对象可很容易的实现菜单( M e n u),每一菜单中的选项都是一个菜单项(M e n u I t e m)类的实例。一个A p p l i c a t i o n类创建这些菜单和它们的菜单项以及其余的用户界面。
该A p p l i c a t i o n类还跟踪用户已打开的D o c u m e n t对象。该应用为每一个菜单项配置一个具体的C o m m a n d子类的实例。当用户选择了一个菜单项时,该M e n u I t e m对象调用它的C o m m a n d对象的E x e c u t e方法,而E x e c u t e执行相应操作。M e n u I t e m对象并不知道它们使用的是C o m m a n d的哪一个子类。C o m m a n d子类里存放着请求的接收者,而E x c u t e操作将调用该接收者的一个或多个操作。例如,P a s t e C o m m a n d支持从剪贴板向一个文档( D o c u m e n t )粘贴正文。P a s t e C o m m a n d的接收者是一个文档对象,该对象是实例化时提供的。E x e c u t e操作将调用该D o c u m e n t的P a s t e操作。

而O p e n C o m m a n d的E x e c u t e操作却有所不同:它提示用户输入一个文档名,创建一个相应的文档对象,将其入作为接收者的应用对象中,并打开该文档。

有时一个M e n u I t e m需要执行一系列命令。例如,使一个页面按正常大小居中的M e n u I t e m
可由一个C e n t e r D o c u m e n t C o m m a n d对象和一个N o r m a l S i z e C o m m a n d对象构建。因为这种需将多条命令串接起来的情况很常见,我们定义一个M a c r o C o m m a n d类来让一个M e n u I t e m执行任意数目的命令。M a c r o C o m m a n d是一个具体的C o m m a n d子类,它执行一个命令序列。M a c r o C o m m a n d没有明确的接收者,而序列中的命令各自定义其接收者。

请注意这些例子中C o m m a n d模式是怎样解耦调用操作的对象和具有执行该操作所需信息的那个对象的。这使我们在设计用户界面时拥有很大的灵活性。一个应用如果想让一个菜单与一个按钮代表同一项功能,只需让它们共享相应具体C o m m a n d子类的同一个实例即可。我们还可以动态地替换C o m m a n d对象,这可用于实现上下文有关的菜单。我们也可通过将几个命令组成更大的命令的形式来支持命令脚本(command scripting)。所有这些之所以成为可能乃是因为提交一个请求的对象仅需知道如何提交它,而不需知道该请求将会被如何执行。

标签:请求,对象,子类,接收者,模式,命令,COMMAND,一个,操作
From: https://blog.csdn.net/workflower/article/details/145078818

相关文章

  • CHAIN OF RESPONSIBILITY(职责链)—对象行为型模式
    1.意图使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。2.动机考虑一个图形用户界面中的上下文有关的帮助机制。用户在界面的任一部分上点击就可以得到帮助信息,所提供的帮......
  • 【工具箱】GitHub命令行访问配置
    文章目录配置SSH访问配置个人访问令牌(代替原密码)GitHubDesktop其它GitHub是编程社区广泛使用的产品,它的使用范围已经扩展到很多需要多版本控制的系统中了。本文介绍配置GitHub的本地访问的方法,以及图形化界面(GitHubDesktop)的下载方法。配置SSH访问ssh-keygen-......
  • vue3 + arcgis.js4.x---卷帘模式
    这里使用天地图的矢量图和影像图作为卷帘对比(tk自行申请)//初始化地图map:newMap({basemap:newBasemap({baseLayers:[newWebTileLayer('http://{subDomain}.tianditu.com/DataServer?T=vec_w&X={col}&Y={row}&L={level}&tk=',{......
  • Sigrity System SI SerialLink模式进行100base_T1协议仿真分析操作指导-100BaseT1_Rx
    SigritySystemSISerialLink模式进行100base_T1协议仿真分析操作指导-100BaseT1_RxSigritySystemSISerialLink模式提供了10个协议合规性检查工具模板,用户可以将根据实际应用替换模板中的SPICE文件,然后进行协议仿真分析,同时软件还提供了目标结果的模板MASK以及该协议需要......
  • Sigrity System SI SerialLink模式进行USB3.0协议仿真分析操作指导-SuperSpeed_Tx_Dev
    SigritySystemSISerialLink模式进行USB3.0协议仿真分析操作指导-SuperSpeed_Tx_DeviceSigritySystemSISerialLink模式提供了10个协议合规性检查工具模板,用户可以将根据实际应用替换模板中的SPICE文件,然后进行协议仿真分析,同时软件还提供了目标结果的模板MASK以及该协议......
  • Linux(Centos 7.6)命令详解:split
    1.命令作用Linux系统中的一个用于拆分文件的命令。它可以将一个大文件拆分成多个小文件,以便于传输、存储或处理2.命令语法Usage:split[OPTION]...[INPUT[PREFIX]]Usage:split[选项]... [输入文件][输出文件前缀]3.参数详解OPTION:-a,--suffix-length=N,生成分裂......
  • Windows下shell命令
    参数说明:- output.log文件名-Nv只隧道持续输出文件:Get-Content"output.log"-Wait  测试端口连通性telnet<host_name_or_ip><port>清除DNS缓存ipconfig/flushdns 运行rust输出日志:cargorun2>&1|Out-File-FilePathoutput.log-Encodingutf8运行npm服务......
  • Debian 安装 killall 命令
    昨天部署一台Debian12服务器,发现竟然没有killall命令,那么就来安装一下吧。执行aptinstallpsmisc命令安装psmic包,这个包的官方仓库是https://gitlab.com/psmisc/psmisc,描述是“一组使用proc文件系统的小型实用程序”,包含以下六个实用工具:fuser-使用文件或套接字识......
  • 一个实例用全创建型模式-优化(冗余消除)
       上一篇:一个实例用全创建型模式-CSDN博客目录:《一个实例讲完23种设计模式》当前:单件+抽象工厂+创建者+工厂方法+优化需求:坦克大战创建两种坦克坦克类型   射程   速度b70   70米   时/70公里b50   50米   时/50公里设计说明1.抽......
  • 详解Redis的Hash类型及相关命令
    目录HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSETNXHINCRBYHINCRBYFLOAT内部编码应用场景HSET设置hash中指定的字段(field)的值(value)。语法HSETkeyfieldvalue[fieldvalue...]时间复杂度:插⼊⼀组field为O(1),插⼊N组field为O(......