Head First 设计模式之命令模式CommandPatternWord文档下载推荐.docx

上传人:b****3 文档编号:7281697 上传时间:2023-05-08 格式:DOCX 页数:16 大小:83.41KB
下载 相关 举报
Head First 设计模式之命令模式CommandPatternWord文档下载推荐.docx_第1页
第1页 / 共16页
Head First 设计模式之命令模式CommandPatternWord文档下载推荐.docx_第2页
第2页 / 共16页
Head First 设计模式之命令模式CommandPatternWord文档下载推荐.docx_第3页
第3页 / 共16页
Head First 设计模式之命令模式CommandPatternWord文档下载推荐.docx_第4页
第4页 / 共16页
Head First 设计模式之命令模式CommandPatternWord文档下载推荐.docx_第5页
第5页 / 共16页
Head First 设计模式之命令模式CommandPatternWord文档下载推荐.docx_第6页
第6页 / 共16页
Head First 设计模式之命令模式CommandPatternWord文档下载推荐.docx_第7页
第7页 / 共16页
Head First 设计模式之命令模式CommandPatternWord文档下载推荐.docx_第8页
第8页 / 共16页
Head First 设计模式之命令模式CommandPatternWord文档下载推荐.docx_第9页
第9页 / 共16页
Head First 设计模式之命令模式CommandPatternWord文档下载推荐.docx_第10页
第10页 / 共16页
Head First 设计模式之命令模式CommandPatternWord文档下载推荐.docx_第11页
第11页 / 共16页
Head First 设计模式之命令模式CommandPatternWord文档下载推荐.docx_第12页
第12页 / 共16页
Head First 设计模式之命令模式CommandPatternWord文档下载推荐.docx_第13页
第13页 / 共16页
Head First 设计模式之命令模式CommandPatternWord文档下载推荐.docx_第14页
第14页 / 共16页
Head First 设计模式之命令模式CommandPatternWord文档下载推荐.docx_第15页
第15页 / 共16页
Head First 设计模式之命令模式CommandPatternWord文档下载推荐.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Head First 设计模式之命令模式CommandPatternWord文档下载推荐.docx

《Head First 设计模式之命令模式CommandPatternWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Head First 设计模式之命令模式CommandPatternWord文档下载推荐.docx(16页珍藏版)》请在冰点文库上搜索。

Head First 设计模式之命令模式CommandPatternWord文档下载推荐.docx

publicvoidOff()

LightisOff!

}

publicclassLightOnCommand:

Command//实现开灯命令

privateLightlight;

publicLightOnCommand(Lightlight)

this.light=light;

publicvoidExecute()

light.On();

1.1.3使用命令对象

publicclassLightControl

privateCommandsoft;

publicvoidSetCommand(Commandcmd)

soft=cmd;

//设置命令对象

publicvoidButtonWasPressed()

soft.Execute();

//调用命令对象的方法

1.1.4简单测试

LightControllightControl=newLightControl();

//模拟命令的调用者

Lightlight=newLight();

//创建一个电灯对象,作为命令的接收者

LightOnCommandlightOnCommand=newLightOnCommand(light);

//创建一个命令,并将接受者传递给它

lightControl.SetCommand(lightOnCommand);

//将命令传给调用者

lightControl.ButtonWasPressed();

//模拟触发按钮

1.2实现遥控器

publicclassRemoteControl

Command[]onCommands;

//定义打开的命令数组

Command[]offCommands;

//定义关闭的命令数组

publicRemoteControl()

onCommands=newCommand[7];

offCommands=newCommand[7];

CommandnoCommand=newNoCommand();

for(inti=0;

i<

7;

i++)

onCommands[i]=noCommand;

//初始化命令数组(默认设置为无命令)

offCommands[i]=noCommand;

//将命令设置到对应的控制器

publicvoidSetCommand(intindex,CommandonCommand,CommandoffCommand)

onCommands[index]=onCommand;

offCommands[index]=offCommand;

//触发打开控制器

publicvoidOnButtonWasPressed(intindex)

onCommands[index].Execute();

//触发关闭控制器

publicvoidOffButtonWasPressed(intindex)

offCommands[index].Execute();

publicoverridestringToString()

StringBuilderstr=newStringBuilder();

str.Append("

\n------RemoteControl------\n"

onCommands.Length;

[solt"

+i+"

]"

+onCommands[i].GetType().FullName+"

"

+offCommands[i].GetType().FullName+"

\n"

returnstr.ToString();

1.3实现其他控制器

//关闭电灯命令

publicclassLightOffCommand:

Command

privateLightlight;

publicLightOffCommand(Lightlight)

publicvoidExecute()

light.Off();

publicvoidUndo()

//打开电扇命令

publicclassCeilingFanOnCommand:

CeilingFanceilingFan;

intpreSpeed;

publicCeilingFanOnCommand(CeilingFanceilingFan)

this.ceilingFan=ceilingFan;

ceilingFan.On();

ceilingFan.Off();

//关闭电扇命令

publicclassCeilingFanOffCommand:

publicCeilingFanOffCommand(CeilingFanceilingFan)

//打开车库门命令

publicclassGarageDoorOnCommand:

GarageDoorgarageDoor;

publicGarageDoorOnCommand(GarageDoorgarageDoor)

this.garageDoor=garageDoor;

garageDoor.On();

garageDoor.Off();

//关闭车库门命令

publicclassGarageDoorOffCommand:

publicGarageDoorOffCommand(GarageDoorgarageDoor)

this.garageDoor=garageDoor;

//打开CD命令

publicclassStereCDOnCommand:

StereCDstereCD;

publicStereCDOnCommand(StereCDstereCD)

this.stereCD=stereCD;

stereCD.On();

stereCD.Off();

//关闭CD命令

publicclassStereCDOffCommand:

publicStereCDOffCommand(StereCDstereCD)

1.4简单测试

RemoteControlremoteControl=newRemoteControl();

CeilingFanceilingFan=newCeilingFan("

LivingRoom"

//创建电扇对象

GarageDoorgarageDoor=newGarageDoor();

//创建车库门对象

StereCDstereCD=newStereCD();

//创建CD对象

Lightlight=newLight();

//创建电灯对象

LightOnCommandlightOnCommand=newLightOnCommand(light);

//创建开灯命令

LightOffCommandlightOffCommand=newLightOffCommand(light);

//创建关灯命令

CeilingFanOnCommandceilingFanOn=newCeilingFanOnCommand(ceilingFan);

//创建开电扇命令

CeilingFanOffCommandceilingFanOff=newCeilingFanOffCommand(ceilingFan);

//创建关电扇命令

GarageDoorOnCommandgarageDoorOn=newGarageDoorOnCommand(garageDoor);

//创建打开电扇命令

GarageDoorOffCommandgarageDoorOff=newGarageDoorOffCommand(garageDoor);

//创建关闭电扇命令

StereCDOnCommandstereCDOn=newStereCDOnCommand(stereCD);

//创建打开CD命令

StereCDOffCommandstereCDOff=newStereCDOffCommand(stereCD);

//创建关闭CD命令

remoteControl.SetCommand(0,lightOnCommand,lightOffCommand);

//将电灯命令设置到对应的控制器上

remoteControl.SetCommand(1,ceilingFanOn,ceilingFanOff);

//将电灯命令设置到对应的控制器上

remoteControl.SetCommand(2,garageDoorOn,garageDoorOff);

//将车库门命令设置到对应的控制器上

remoteControl.SetCommand(3,stereCDOn,stereCDOff);

//将CD命令设置到对应的控制器上

remoteControl.OnButtonWasPressed(0);

remoteControl.OffButtonWasPressed(0);

remoteControl.OnButtonWasPressed

(1);

remoteControl.OffButtonWasPressed

(1);

remoteControl.OnButtonWasPressed

(2);

remoteControl.OffButtonWasPressed

(2);

remoteControl.OnButtonWasPressed(3);

remoteControl.OffButtonWasPressed(3);

1.5实现撤销命令

1.5.1修改命令接口,新增Undo()方法

voidUndo();

//新增撤销方法

1.5.2修改命令,实现Undo方法

publicssLightOnCommand:

publicvoidUndo()//实现Undo方法

其他类都依次修改

1.5.3修改RemoteControl类,新增Command对象记录上一步操作

publicclassRemoteControlWithUndo

CommandundoCommand;

//创建Command对象用来记录上一步执行的命令

publicRemoteControlWithUndo()

CommandnoCommand=newNoCommand();

for(inti=0;

undoCommand=noCommand;

………

……..

publicvoidOnButtonWasPressed(intindex)

undoCommand=onCommands[index];

//记录打开命令

publicvoidOffButtonWasPressed(intindex)

undoCommand=offCommands[index];

//记录关闭命令

publicvoidUndoButtonWasPressed()//执行撤销

undoCommand.Undo();

……

1.6宏命令

让遥控器具有Party模式,即一个按键能够同步调用多个命令,这就是所谓的宏命令。

publicclassMacroCommand:

Command[]commands;

//定义命令数组,用来接收传入的命令

publicMacroCommand(Command[]commands)

mands=commands;

publicvoidExecute()//批量处理多个命令(即初始化的时候传入的命令数组)

commands.Length;

commands[i].Execute();

publicvoidUndo()

commands[i].Undo();

2定义命令模式

命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。

命令模式也支持可撤销的操作。

定义命令模式类图:

3命令模式的更多用途

3.1队列请求

命令将运算块打包,然后将它传来传去,即使在命令对象创建许久之后,运算依然可以被调用,甚至可以在不同的线程中被调用,我们可以利用这样的特性衍生一下应用,比如:

日常安排、线程池、工作队列等。

工作队列类和进行计算的对象之间完全是解耦的。

它们只要是实现命令模式的对象就可以放到队列里边,当线程可用时就调用此对象的Execute()方法。

3.2日志请求

某些应用需要我们将所有动作记录到日志中,并在系统死机之后,重新调用这些动作恢复到之前的状态,命令模式就能够支持这一点。

有许多调用大型数据结构的动作应用无法再每次改变发生时被快速的存储,通过使用记录日志,我们可以将上次检查点之后的所有操作记录下来,如果系统出现状况,可以从检查点开始应用这些操作。

对于更高级的应用而言,这些技巧可以被扩展应用到事务处理中,即一整群操作必须全部完成,或者没有进行任何操作。

3总结

l命令模式将发出请求的对象和执行请求的对象解耦。

l被解耦的两者之间是通过命令对象进行沟通的,命令对象封装了接收者和一个或一组动作。

l调用者通过调用命令对象的Execute()发出请求,会使得接收者的动作被调用。

l调用者可以接收命令当做参数,甚至在运行时动态进行。

l命令可以支持撤销,做法是实现一个undo()方法来回到Execute()被执行之前的状态。

l宏命令是命令的一种简单的延伸,允许调用多个命令,宏方法也可以支持撤销。

l命令也可以用来实现日志和事务系统。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2