页数/内容 | 收获 |
191-206命令模式,例子:遥控器,设置不同按键不同命令 时间:8.25-8.50 | 命令模式:把“发出请求的对象”和“接受与执行这些请求的对象”分隔开。利用命令对象,把请求(如开灯)封装成一个特定对象(客厅电灯对象)。如果每个按钮都存储一个命令对象,那么当按钮被按下的时候,就可以请命令对象做相关的工作。遥控器并不需要知道工作内容是什么,只要有个命令对象能和正确的对象沟通,把事情做好就可以,这样就把遥控器和电灯对象解耦了。 |
206-214命令模式 时间:10.22-10.44 | 命令模式定义:将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。 一个命令对象通过在特定接收者上绑定一组动作来封装一个请求,命令对象将动作和接收者包进对象中。这个对象只暴露出一个execute()方法,当此方法调用的时候,接收者就会进行这些动作。
命令对象(调用)-->接收者、接收者执行的动作(封装),如遥控器开灯,灯、开灯封装起来,遥控器对象调用封装起来的接收者(灯),就可以执行开灯操作,而遥控器不需要知道如何实现。 实体类:遥控器(初始化命令,提供命令细节的方法)、灯(包含开灯动作的方法excute,构造器指定该灯的名称) |
215-223命令模式 时间:11.-11.20 | 了解丰富遥控器的功能,Undo直接撤销的操作(如灯的开关),undo根据状态撤销(如风扇的转速)的代码 |
203-216命令模式,例子:遥控器的代码 时间:1.40-2.30 2.40-3. | 需求:遥控器命令(excute)电灯对象(command)打开(on)电灯 代码一:
需求:遥控器命令(excute)多个电灯对象(command)打开(on)关闭(off)电灯 代码二: 1、定义NoCommand,实现Command,但其excute方法里面没有任何操作,主要用于遥控器初始化 2、重新定义遥控器NewRemoteControl ①定义实例变量数组Command[],将其初始化为NoCommand ②定义其包含的setCommand设置命令方法,参数为位置,开灯操作,关灯操作LightOffCommand ③定义对应按键位置的开灯操作的方法,参数为位置,开灯操作 ④定义对应按键位置的关灯操作的方法,参数为位置,关灯操作 |
215-223命令模式,例子:遥控器的代码 时间:3.25-3.50 | 需求一:电灯的undo撤销操作 代码一(在上面代码二的基础上):
①添加新的实例变量undoCommand,初始化为NoCommand,用来保存上一个指令 ②在开灯方法中赋值undoCommand = onCommand[slot],在关灯方法中赋值undoCommand = offCommand[slot] ③添加undo方法,调用对应的Command指令,完成撤销操作undoCommand .undo()
需求二:使用状态实现撤销操作 例子:风扇的转速高中低
|
224-233命令模式 时间:4.10-4.20 | 需求:使用宏命令对电灯、风扇进行一键开关操作
①封装需要一键操作的功能Command作为一个数组,赋值给MacroCommand的实例变量数组Command[] commands ②在excute方法中遍历该commands[i].excute 2、一键undo操作,在赋值commands的时候赋值给undoCommands,在undo方法中遍历该undoCommands[i].undo |