命令模式的运用
- 格式:doc
- 大小:56.50 KB
- 文档页数:8
命令模式的实现和使用方法在软件开发中,设计模式是一个重要的话题。
其中之一的命令模式是一种行为型模式,它可以将请求封装成一个对象,从而使得请求的发出者和执行者相分离。
命令模式的实现命令模式由四个角色组成:请求者、接收者、命令和调用者。
在请求者想要发起一个请求时,它们会创建一个命令,并将接收者和具体操作传递给该命令。
命令会将请求者和接收者解耦,并对请求进行封装。
命令模式中的关键是命令和调用者的互动。
调用者负责执行命令,并记录它们的执行历史。
命令可以具有多种方式,包括撤销、重做、执行等。
在实现命令模式时,需要注意以下几点:1. 确定它们之间的关系:请求者、接收者,命令和调用者之间的交互模式。
2. 创建请求类:创建一个请求类,以便在调用者和接收者之间的请求传递数据。
3. 创建接收类:创建一个或多个接收者类,可以改变程序状态,如文件处理等。
4. 创建命令类:创建一个或多个命令类,负责处理请求,并有可能在需要时进行撤销和重做。
5. 创建调用者类:创建一个调用者类,包含多个命令对象。
调用者类可以选择将这些对象存储在一个列表中,并且可以在需要时执行它们。
6. 将操作封装在命令类:此时,调用者类可以从命令中获取请求代码,并尝试执行该命令。
命令模式的使用方法1. 确定应用程序中的每个用户操作,并将其视为一个命令。
2. 将这些命令都存储在一个列表中,并确保它们按顺序存储。
3. 创建一个调用者类,可以执行这些命令,并在需要时记录它们。
4. 将每个命令与一个接收者连接起来,以便在需要时可以更改程序状态。
5. 创建一个请求类,以便在调用者和接收者之间传递请求数据。
6. 将各个命令与调用者相互连接,并且使得调用者类按需执行命令。
命令模式的优缺点优点:1. 降低系统的耦合性。
2. 可以让请求者和接收者之间的交互变得更加灵活。
3. 容易实现撤销、重做等功能。
4. 可以将请求排队,从而实现多种不同任务的执行。
缺点:1. 如果命令较多,类库长度可能会很长。
命令模式和职责链模式的区别一、前言命令模式和职责链模式是两种常见的设计模式,在软件开发中得到广泛的应用。
本文将深入探讨这两种模式的区别及其适用场景,以便开发者在实际工作中进行灵活选择。
二、命令模式命令模式是一种行为型模式,它将一个请求封装成一个对象,从而允许你使用不同的请求、队列、日志请求等来参数化客户端对象。
命令模式也可用于支持撤销操作。
命令模式一般由四个部分组成:抽象命令类、具体命令类、接收者类和请求者类。
抽象命令类通常定义了具体命令类和请求者类之间的接口,这个接口可以由多个具体命令子类来实现。
具体命令类则实现了这个接口,并在execute() 方法中调用了接收者的操作。
接收者类负责实现具体的业务逻辑,也就是具体的命令请求的真正执行者。
而请求者类则负责创建具体的命令对象并传递接收者对象。
命令模式的主要优点在于:通过将请求封装成对象,命令模式可以保证请求的发送者和接收者之间的解耦。
同时,由于请求被封装成了一个对象,所以可以很方便地实现请求的撤销和重做等操作。
而命令模式的主要缺点则在于:会增加系统的代码复杂度,同时也会增加一些类和对象的数量。
三、职责链模式职责链模式是一种行为型模式,它仅仅是让一个任务可以被不同的对象处理,而每个对象只负责本身的处理逻辑。
职责链模式将请求和处理分离开来,这样请求者就不需要知道具体的处理方案,而处理者也不需要知道向谁发送过请求。
职责链模式可以根据业务实际情况动态地组织处理任务的对象。
职责链模式一般由抽象处理者类、具体处理者类和请求者类三部分组成。
抽象处理者类定义了一个处理请求的方法,并且声明了一个指向下一个处理者的成员变量。
具体处理者类实现该方法并判断自己能否将该请求处理掉,如果可以,就处理掉;否则就将该请求转发给它的后继者。
每个具体处理者类中都应该封装具体的处理逻辑。
请求者类则负责创建具体的处理者对象并将请求发送给它。
职责链模式的主要优点在于:允许请求者和处理者之间进行解耦,每个处理者只需要关心自己的处理逻辑,不用管是哪个处理者处理请求,也不知道处理的具体细节。
chmod命令的几种用法chmod命令是在Unix和类Unix操作系统中用于更改文件或目录的权限的命令。
它允许用户为文件或目录设置读取、写入和执行权限。
以下是chmod命令的几种常见用法:1. 符号模式,chmod命令可以使用符号模式来更改文件或目录的权限。
符号模式包括操作符(+、-、=)、权限部分(u、g、o、a)和权限(r、w、x)。
例如,使用chmod命令将文件file.txt的所有者(u)的写权限(w)设置为可读写,chmod u+w file.txt。
2. 数字模式,chmod命令也可以使用数字模式来更改文件或目录的权限。
每种权限(读取、写入、执行)都有一个对应的数字值,分别为4、2和1。
用户、用户组和其他用户的权限分别占据一个3位的数字。
例如,将文件file.txt的所有者的权限设置为可读写(4+2=6),用户组的权限设置为只读(4),其他用户的权限设置为无(0),chmod 640 file.txt。
3. 递归模式,使用chmod命令时,可以添加参数-R来递归地更改目录及其子目录中的文件权限。
这在需要同时更改目录和文件权限时非常有用。
4. 结合使用,chmod命令还可以结合使用符号模式和数字模式,以实现更复杂的权限设置。
例如,可以使用符号模式为文件添加执行权限,同时使用数字模式将所有者和用户组的权限设置为可读写,chmod u+w,go+x file.txt。
总之,chmod命令可以通过符号模式、数字模式、递归模式和结合使用等多种方式来灵活地更改文件或目录的权限,以满足用户对文件权限管理的不同需求。
如何使用Vim进行代码编辑引言:Vim是一款高度可定制的文本编辑器,广泛用于程序员和系统管理员之间的代码编辑和文本处理任务。
它具有强大的功能和灵活的操作方式,可以大大提高编码效率。
本文将介绍如何在Vim 中进行代码编辑,并列举一些常用的技巧和快捷方式,帮助读者更好地使用Vim编辑器。
第一章:Vim基础1.1 安装和启动Vim- 下载和安装Vim的最新版本;- 运行终端,并输入“vim”命令启动Vim编辑器;- 进入Vim的命令模式并开始编辑代码。
1.2 Vim的基本模式- 命令模式:用于执行各种编辑命令;- 插入模式:用于实际编辑文本;- 可视模式:用于选择和操作文本块。
第二章:Vim编辑技巧2.1 移动光标的快捷方式- 使用h、j、k、l键分别向左、向下、向上、向右移动光标;- 使用gg和G快速在文件的开头和结尾之间切换;- 使用Ctrl+f和Ctrl+b在文本之间快速滚动。
2.2 文本编辑和修改- 使用i和a命令进入插入模式,用于在当前光标处开始编辑;- 使用o和O命令在当前行之后或之前插入新行并进入插入模式;- 使用d和p命令删除和粘贴文本。
2.3 撤销和重做操作- 使用u和Ctrl+r命令撤销和重做上一次操作;- 使用U快速撤销对整行的修改;- 使用.命令重复上一次的修改操作。
第三章:Vim的高级功能3.1 多文件编辑- 使用:sp和:vsp命令在同一个窗口中同时打开多个文件;- 使用Ctrl+w+h、Ctrl+w+j、Ctrl+w+k和Ctrl+w+l快捷方式在不同窗口之间切换;- 使用:bn和:bp命令在不同的缓冲区之间切换。
3.2 快速搜索和替换- 使用/和?命令分别进行向前和向后的快速搜索;- 使用:%s/old/new/g命令进行全局搜索和替换;- 使用:n和:N命令在不同的匹配项之间跳转。
3.3 定制Vim编辑器- 创建.vimrc文件并添加个人配置选项;- 定制快捷键和颜色方案;- 下载和安装插件以增强Vim的功能。
Vi操作说明一. 模式说明1.两种模式:Command mode(命令模式):用于输入命令。
Insert mode(插入模式):用于插入文本。
2.模式之间的切换:二. 操作说明1.文档的操作1)打开文档:vi fn…fn 打开或创建文档(多个文档时候用 :n 切换到下一个文档)。
vi +n | + fn 打开文档件并置光标于第n行或最后一行。
vi +/pattern fn 打开文档并置光标于第一个与pattern匹配的字串处。
2)保存文档::w 保存当前文档:w! 强制保存3)退出文档::q 退出vi (文档如果有更改会提示是否保存):q! 不保存文件并退出:x 保存文件并退出4)恢复文档:vi –r fn 恢复文档fn 至上次正在编辑时的系统崩溃点。
5)删除文档:rm fn … fn 删除文档fn或多个6)重命名文档:mv fn_old fn_new 用fn_new重命名文档fn_old7)拷贝文档:cp ../fn_sou ../fn_des 拷贝文档fn_sou至 fn_des,文档可以指定定绝对路径或相对路径2.文本的操作及编辑命令1)光标移动:h,j,k,l 左,下,上,右移一个字符b | B ,w | W 左,右移一个字至字首e | E 右移一个字至字首) | ( , } | { 句尾|句首,段尾|段首n+ | n- | nG 下移n行|上移n行|移至第n行行首G 移至文档尾行0 | $ 移至光标所在行首|行尾H | M | L 移至屏幕顶|中|尾行行首ctrl+u | ctrl+d 向文档首|尾翻半屏ctrl+f | ctrl+b 向文档首|尾翻一屏2)插入命令:i | I 在光标前插入|在当前行首插入a | A 在光标后插入|在当前行首插入o | O 在当前行之下|之上新增加一行r | R 替换当前字符|替换当前字符及其后的字符至按ESC键ns | nS 光标所在位置开始以输入文本代替指定数目的字符|行ncw | ncW 修改指定数目的字ncc 修改指定数目的行u 撤销修改或删除3)删除命令:nx | nX 删除光标处字符及其后 | 前的n-1个字符ndw | ndW 删除光标处开始及其后的n-1个字d0 | d$ 删除至行首|尾ndd 删除当前行及其后的n-1行: n1,n2 d 将n1行到n2行之间的内容删除4)搜索命令:/pattern | ?pattern 从光标处开始向文档尾 | 首部搜索patternn | N 在同 | 反向上重复上一次搜索命令5)替换命令::n1,n2s/p1/p2/g 将第n1行至第n2行中所有的p1用p2代替注:A. 其中n1,n2的几种特殊情况a.可以不指定,如::s/p1/p2/g 将当前行中所有p1替换成p2b.可以只指定n2,如: :,n2s/p1/p2/g 将当前行至第n2行中所有p1替换成p2c.特殊范围: :0,$s/p1/p2/g 将首行至尾行中所有p1替换成p2其中 0,$ 可以换成 %。
CAD中的编辑命令与修改技巧CAD(计算机辅助设计)是一种常用的工程设计软件,广泛应用于建筑设计、机械制图等领域。
在使用CAD软件时,编辑命令和修改技巧是非常重要的,它们可以帮助我们高效地完成绘图任务。
本文将介绍一些常用的CAD编辑命令和修改技巧,希望对读者有所帮助。
1. 移动命令移动命令在CAD中非常常用,它可以将选择的对象在平面内进行平移。
通过点击编辑菜单栏中的“移动”按钮或输入“MOVE”命令,可以进入移动命令模式。
在移动命令模式下,选择需要移动的对象,然后指定基点和目标点,即可完成移动操作。
移动命令也支持相对移动,可以输入相对坐标值或指定角度进行平移。
2. 复制命令复制命令和移动命令类似,不同之处在于复制命令会在原位置产生一个副本。
复制命令可以通过点击编辑菜单栏中的“复制”按钮或输入“COPY”命令进入。
选择需要复制的对象,然后指定基点和目标点,即可完成复制操作。
复制命令也支持相对复制,可以输入相对坐标值或指定角度进行复制。
3. 旋转命令旋转命令可以将选择的对象按照指定角度进行旋转。
通过点击编辑菜单栏中的“旋转”按钮或输入“ROTATE”命令,可以进入旋转命令模式。
在旋转命令模式下,选择需要旋转的对象,然后指定旋转中心点和旋转角度,即可完成旋转操作。
4. 缩放命令缩放命令可以将选择的对象按照指定比例进行放大或缩小。
通过点击编辑菜单栏中的“缩放”按钮或输入“SCALE”命令,可以进入缩放命令模式。
在缩放命令模式下,选择需要缩放的对象,然后指定基点和比例因子,即可完成缩放操作。
5. 镜像命令镜像命令可以将选择的对象按照指定直线进行镜像变换。
通过点击编辑菜单栏中的“镜像”按钮或输入“MIRROR”命令,可以进入镜像命令模式。
在镜像命令模式下,选择需要镜像的对象,然后指定镜像直线,即可完成镜像操作。
6. 偏移命令偏移命令可以将选择的对象按照指定距离进行平行复制。
通过点击编辑菜单栏中的“偏移”按钮或输入“OFFSET”命令,可以进入偏移命令模式。
行政决策模式的类型行政决策是指行政机关在履行职能过程中,根据法定权限和程序,对相关事项作出决策的过程。
行政决策模式是指在行政决策过程中,根据不同的情境和目标,采用不同的决策方式和方法。
行政决策模式的类型有很多种,下面将介绍其中的几种常见类型。
1. 命令型决策模式命令型决策模式是指行政机关根据法律、法规或上级机关的命令,对相关事项作出决策的模式。
这种决策模式强调执行力和效率,决策结果一般是强制性的,不容置疑。
这种模式适用于一些紧急、重要和复杂的决策,例如应对突发事件、制定应急预案等。
2. 顾问型决策模式顾问型决策模式是指行政机关在决策过程中,征求专家、学者、利益相关方等多方面的意见和建议,以提高决策的科学性和准确性。
这种决策模式注重专业性和权威性,能够充分利用各方的智慧和经验,减少决策的偏差和风险。
这种模式适用于一些涉及专业知识和技术的决策,例如制定政策、规划项目等。
3. 参与型决策模式参与型决策模式是指行政机关在决策过程中,广泛征求社会公众的意见和建议,以增加决策的合理性和公正性。
这种决策模式强调民主参与和社会监督,能够提高决策的透明度和可信度。
这种模式适用于一些涉及公众利益和权益的决策,例如城市规划、环境保护等。
4. 研究型决策模式研究型决策模式是指行政机关在决策过程中,进行系统研究和分析,以获取科学依据和数据支持。
这种决策模式注重科学性和客观性,能够减少主观偏见和随意性。
这种模式适用于一些需要科学研究和分析的决策,例如制定发展规划、评估政策效果等。
5. 灵活型决策模式灵活型决策模式是指行政机关在决策过程中,根据具体情况和实际需要,灵活调整和变化决策方式和方法。
这种决策模式注重灵活性和适应性,能够应对复杂多变的情况和问题。
这种模式适用于一些需要快速响应和灵活调整的决策,例如应对市场变化、调整政策措施等。
总之,行政决策模式的类型多种多样,每种类型都有其适用的情境和特点。
在实际工作中,行政机关需要根据具体情况选择合适的决策模式,并结合实际情况进行灵活运用,以达到最佳的决策效果。
telnet的命令和模式Telnet是一种用于远程登录和管理网络设备的协议,它可以在本地计算机上通过命令行终端与远程计算机进行通信。
在使用Telnet 时,用户需要输入一些特定的命令和模式来执行不同的操作。
下面是一些常见的Telnet命令和模式:1. 连接远程计算机:用户可以使用“telnet [IP地址] [端口号]”命令连接到远程计算机。
例如,如果要连接到IP地址为192.168.1.1的路由器,端口号为23,则可以输入“telnet192.168.1.1 23”。
2. 登录远程计算机:在连接到远程计算机后,用户需要输入用户名和密码进行登录。
有些设备可能不需要密码或者需要使用特定的用户名和密码才能登录。
一旦成功登录,用户就可以在远程计算机上执行各种命令。
3. 查看帮助文档:用户可以使用“?”命令查看远程设备的帮助文档。
此外,很多设备还提供了详细的命令手册,用户可以通过输入“help”命令来查看。
4. 切换模式:有些设备会提供不同的模式,例如用户模式、特权模式、全局配置模式等。
用户可以使用“enable”命令进入特权模式,再使用“configure terminal”命令进入全局配置模式。
不同的模式可以执行不同的操作。
5. 查看设备状态:用户可以使用“show”命令来查看设备的状态信息,例如路由表、接口状态、CPU利用率等。
这些信息对于诊断和解决网络问题非常有用。
总的来说,Telnet是一种非常实用的协议,可以方便地管理远程设备。
但是由于其不安全的特点,现在已经被SSH等更安全的协议所取代。
如果可能,建议使用更安全的协议来远程管理设备。
ucs命令的运用UCS(Unified Computing System)是思科推出的一款数据中心整体架构解决方案,在实际应用中,可以通过命令行界面(CLI)来进行配置和管理。
以下是一些常用的UCS命令及其运用:1. show:显示UCS的各种配置和状态信息。
例如:show ip int brief,显示UCS上所有接口的IP地址和状态。
2. configure terminal:进入全局配置模式,配置全局参数。
例如:configure terminal,进入全局配置模式进行一些全局设置。
3. scope:进入特定的设置范围,配置该范围内的参数。
例如:scope org,进入组织级别的配置模式,配置组织参数。
4. set:对UCS中的各种参数进行配置。
例如:set ip address 192.168.0.1,设置UCS管理IP地址为192.168.0.1。
5. commit-buffer:将配置更改保存到UCS中。
例如:commit-buffer,将当前的配置更改保存到UCS。
6. connect NX-OS:进入交互式命令行模式,管理UCS集成的交换机。
例如:connect NX-OS,进入交互式命令行模式以管理集成的交换机。
7. show service-profile:显示已配置的服务配置文件的相关信息。
例如:show service-profile,显示已配置的服务配置文件的详细信息。
8. reboot:重启UCS设备。
例如:reboot,重启UCS设备。
这些命令只是UCS命令的一小部分,UCS有非常丰富的命令集,用于配置和管理不同的功能和模块。
使用UCS命令时,需要根据实际需求来选择合适的命令,并参考官方手册或文档进行操作。
命令模式在实践中的应用场景命令模式是一种设计模式,它可以将请求封装成一个对象,从而使不同的请求可以被抽象成一个命令集合,执行者和请求者的耦合度也得以降低。
在实践中,命令模式有很多应用场景,本文将介绍其中的一些。
一、游戏开发中的应用在游戏开发中,命令模式是被广泛使用的一种模式。
比如,当我们用手柄来控制游戏角色时,我们通过按下手柄上的按钮来发出控制信号,而这些信号都对应着一种命令。
如何将控制信号转化为对应的命令,就可以采用命令模式的思想来实现。
具体地说,我们可以将每一个按钮都封装成一个命令对象,当玩家按下按钮时,执行相应的命令对象的方法,从而实现对角色的控制。
这种方式不仅能够简化代码结构,还能够扩展游戏的功能,提高游戏的可玩性。
二、电商平台中的应用在电商平台中,订单管理是关键的业务之一。
为了方便管理订单,我们可以采用命令模式来实现订单的处理。
具体地说,我们可以将处理订单的方法封装成一个统一的接口,将订单对象封装成一个命令对象,从而实现订单处理的可扩展性。
比如,对于取消订单的操作,我们可以将取消订单的方法封装成一个名称为“CancelOrder”的接口,在每个订单对象中加入一个对该接口的引用,并在订单对象中实现该接口。
当用户通过界面操作取消订单时,程序会根据订单对象的引用找到对应的“CancelOrder”命令对象,并执行其方法,从而实现订单的取消。
三、物联网领域中的应用在物联网领域中,命令模式同样有广泛的应用。
比如,在智能家居领域中,我们可以采用命令模式来实现对家居设备的控制。
具体地说,我们可以将每个家居设备都封装成一个命令对象,通过执行相应的命令对象,控制家居设备的开关、调节等操作。
比如,我们可以封装一种“TurnOnLight”(开灯)的命令对象,当用户想要开灯时,程序会执行该命令对象的方法,从而控制灯的开关。
同样地,我们可以封装一种“AdjustTemperature”(调节温度)的命令对象,通过执行该命令对象,用户可以调节房间的温度。
实验四命令模式的运用一、实验目的:命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象,命令模式也支持可撤销的操作。
在熟悉命令模式相关理论知识的基础上,使用命令模式实现图片处理程序。
二、实验要求:使用命令模式实现图片处理程序,要求如下:1.图片处理程序要有3张图片。
2.每张图片至少有3种操作。
3.实现类似遥控器的菜单,动态的选择对图片进行的处理。
4.要有“撤消操作”,撤消操作要可以撤销至最后一步。
1、设计并绘制该程序的类图;2、依照设计的类图使用Java语言编写代码,并实现该程序;3、除了核心的模式相关类实现外,提供测试环境,按照难度高低,分别是:a)控制台程序,Client硬编码初始化模式和测试环境,运行结果文本输出;b)控制台程序,Client初始化测试环境,并根据用户输入运算,运行结果文本输出;c)设计并实现用户UI,Client初始化测试环境,并根据用户在UI控件上的输入运算,运行结果文本输出;三、实验内容:类图代码package Picture;public interface Command {public void execute();public void undo();}package Picture;public class NoCommand implements Command {public void execute() { }public void undo() { }}package Picture;public class Picture {public static final int enlarge=1; //放大图片;public static final int rotating=2;//旋转图片;public static final int ensmall=3;// 缩小图片;public static final int OFF= 0;//"无操作";int way;String location;public Picture(String location) {this.location = location;way=OFF;}public void enlarge() {way = enlarge;System.out.println(location + " 已放大");}public void rotating() {way= rotating;System.out.println(location + " 已旋转180°");}public void ensmall() {way = ensmall;System.out.println(location + " 已缩小");}public void OFF() {way= OFF;System.out.println(location + " 无操作");}public int getWay() {return way;}}package Picture;public class PictureenlargeCommand implements Command { Picture p;int prevWay;public PictureenlargeCommand(Picture p) {this.p=p;}public void execute() {prevWay = p.getWay();p.enlarge();}public void undo() {if (prevWay == p.enlarge) {p.enlarge();} else if (prevWay ==p.ensmall) {p.ensmall();;} else if (prevWay == p.rotating) {p.rotating();} else if (prevWay == p.OFF) {p.OFF();}}}package Picture;public class PictureensmallCommand implements Command {Picture p;int prevWay;public PictureensmallCommand(Picture p) {this.p=p;}public void execute() {prevWay = p.getWay();p.ensmall();}public void undo() {if (prevWay == p.enlarge) {p.enlarge();} else if (prevWay ==p.ensmall) {p.ensmall();;} else if (prevWay == p.rotating) {p.rotating();} else if (prevWay == p.OFF) {p.OFF();}}}package Picture;public class PictureroatingCommand implements Command { Picture p;int prevWay;public PictureroatingCommand(Picture p) {this.p=p;}public void execute() {prevWay = p.getWay();p.rotating();}public void undo() {if (prevWay == p.enlarge) {p.enlarge();} else if (prevWay ==p.ensmall) {p.ensmall();;} else if (prevWay == p.rotating) {p.rotating();} else if (prevWay == p.OFF) {p.OFF();}}}package Picture;import java.util.LinkedList;import java.util.List;import java.util.*;//// This is the invoker//public class RemoteControlWithUndo {Command[] enlargeCommands;Command[] ensmallCommands;Command[] rotatingCommands;List<Command> undoCommand;public RemoteControlWithUndo() {enlargeCommands = new Command[3];ensmallCommands = new Command[3];rotatingCommands = new Command[3];Command noCommand = new NoCommand();for(int i=0;i<3;i++) {enlargeCommands[i] = noCommand;ensmallCommands[i] = noCommand;rotatingCommands[i] = noCommand;}undoCommand=new LinkedList<Command>();}public void setCommand(int slot, Command enlargeCommand, Command ensmallCommand,Command rotatingCommand) {enlargeCommands[slot] = enlargeCommand;ensmallCommands[slot] = ensmallCommand;rotatingCommands[slot] = rotatingCommand;}public void largeButtonWasPushed(int slot) {enlargeCommands[slot].execute();undoCommand.add(enlargeCommands[slot]);}public void smallButtonWasPushed(int slot) {ensmallCommands[slot].execute();undoCommand.add(ensmallCommands[slot]);}public void rotatingButtonWasPushed(int slot) {rotatingCommands[slot].execute();undoCommand.add(rotatingCommands[slot]);}public void undoButtonWasPushed() {undoCommand.remove(undoCommand.size()-1).undo();}}测试代码package Picture;public class RemoteLoader {public static void main(String[] args) {RemoteControlWithUndo remoteControl = new RemoteControlWithUndo();Picture[] p=new Picture[3];PictureenlargeCommand[] enlarge=new PictureenlargeCommand[3];PictureensmallCommand[] ensmall=new PictureensmallCommand[3];PictureroatingCommand[] roating =new PictureroatingCommand[3];for(int i=0;i<3;i++){p[i]=new Picture("图"+(i+1));enlarge[i] =new PictureenlargeCommand(p[i]);ensmall[i] =new PictureensmallCommand(p[i]);roating[i] =new PictureroatingCommand(p[i]);remoteControl.setCommand(i, enlarge[i], ensmall[i], roating[i]);}System.out.println("图片处理");for(int i=0;i<3;i++){rgeButtonWasPushed(i);remoteControl.smallButtonWasPushed(i);remoteControl.rotatingButtonWasPushed(i);}System.out.println("进行撤销操作");for(;remoteControl.undoCommand.size()!=0;)remoteControl.undoButtonWasPushed();}}运行结果四、实验总结:本次试验,学会了命令模式的简单应用,在熟悉命令模式相关理论知识的基础上,使用命令模式实现了图片处理程序。