您的位置:首页 > 编程语言 > Delphi

Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---命令模式之SimpleRemoteControlTest

2009-11-10 16:15 519 查看
1. 命令的接受者

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.


运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐