Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---命令模式之SimpleRemoteControlTest
2009-11-10 16:15
519 查看
1. 命令的接受者
2.命令对象
3.命令的请求者即发出者
4.客户端代码
运行结果:
unit uReceiveObject; interface type TLight = class(TObject) public procedure Open; procedure Off; end; TGarageDoor = class(TObject) public procedure Up; procedure Down; procedure Stop; procedure LightOn; procedure LightOff; end; implementation { TLight } procedure TLight.Off; begin Writeln(''); end; procedure TLight.Open; begin Writeln('Light is On.'); end; { TGarageDoor } procedure TGarageDoor.Down; begin Writeln(''); end; procedure TGarageDoor.LightOff; begin Writeln(''); end; procedure TGarageDoor.LightOn; begin Writeln(''); end; procedure TGarageDoor.Stop; begin Writeln(''); end; procedure TGarageDoor.Up; begin Writeln('GarageDoor is Open.'); end; end.
2.命令对象
unit uCommandObject; interface uses uReceiveObject; type TCommand = class(TObject) public procedure Execute; virtual; abstract; end; TLightOnCommand = class(TCommand) private FLight: TLight; public constructor Create(aLight: TLight); procedure Execute; override; end; TGarageDoorOpenCommand = class(Tcommand) private FGarageDoor: TGarageDoor; public constructor Create(aGarageDoor: TGarageDoor); procedure Execute; override; end; implementation { TLightOnCommand } constructor TLightOnCommand.Create(aLight: TLight); begin FLight := aLight; end; procedure TLightOnCommand.Execute; begin FLight.Open; end; { TGarageDoorOpenCommand } constructor TGarageDoorOpenCommand.Create(aGarageDoor: TGarageDoor); begin FGarageDoor := aGarageDoor; end; procedure TGarageDoorOpenCommand.Execute; begin FGarageDoor.Up; end; end.
3.命令的请求者即发出者
unit uSimpleRemoteControl; interface uses uCommandObject; type TSimpleRemoteControl = class(TObject) private FSlot: TCommand; public procedure SetCommand(aCommand: TCommand); procedure ButtonWasPressed; end; implementation { TSimpleRemoteControl } procedure TSimpleRemoteControl.ButtonWasPressed; begin FSlot.Execute; end; procedure TSimpleRemoteControl.SetCommand(aCommand: TCommand); begin FSlot := aCommand; end; end.
4.客户端代码
program pSimpleRemoteControlTest; {$APPTYPE CONSOLE} uses uSimpleRemoteControl in 'uSimpleRemoteControl.pas', uCommandObject in 'uCommandObject.pas', uReceiveObject in 'uReceiveObject.pas'; var Remote: TSimpleRemoteControl; Light: TLight; GarageDoor: TGarageDoor; LightOnCommand: TCommand; GarageDoorOpenCommand: TCommand; begin {创建命令的发出者} Remote := TSimpleRemoteControl.Create; {创建命令的接收者} Light := TLight.Create; GarageDoor := TGarageDoor.Create; {创建具体的命令对象} LightOnCommand := TLightOnCommand.Create(Light); GarageDoorOpenCommand := TGarageDoorOpenCommand.Create(GarageDoor); {加载命令并执行} Remote.SetCommand(LightOnCommand); Remote.ButtonWasPressed; Remote.SetCommand(GarageDoorOpenCommand); Remote.ButtonWasPressed; Remote.Free; Light.Free; GarageDoor.Free; LightOnCommand.Free; GarageDoorOpenCommand.Free; Readln; end.
运行结果:
![](http://p.blog.csdn.net/images/p_blog_csdn_net/djCode/EntryImages/20091110/pic.jpg)
相关文章推荐
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---命令模式之SimpleRemoteWithUndoTest
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---命令模式之RemoteControlTest
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---观察者模式之WeatherReport
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---模板方法模式之CoffeineBeverageWithHook
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---策略模式之MiniDuckSimulator
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---装饰模式之StarBuzzCoffee
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---状态模式
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---门面模式之HomeTheater
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---迭代器模式之DinerMenu
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---工厂模式之简单工厂
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---适配器模式之TurkeyAdapter
- Delphi 设计模式:《HeadFirst设计模式》Delphi2007代码---工厂模式之工厂方法
- Delphi 设计模式:《HeadFirst设计模式》Delphi2007代码---组合模式之Menus
- Delphi 设计模式:《HeadFirst设计模式》Delphi代码---模式小结之一个叫声接口和几只鸭子
- Delphi 设计模式:《HeadFirst设计模式》Delphi代码---工厂模式之抽象工厂
- Delphi 设计模式:《HeadFirst设计模式》Delphi2007代码---单例模式之ChocolateBoiler
- 设计模式讲解与代码实践(十五)——命令
- 设计模式----命令模式UML和实现代码
- 用代码说话之-----用电磁炉炒菜时,想到的设计模式(命令模式和单例模式)
- 【java设计模式之Command(菜单命令) 】