//命令的接受者
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.
//命令对象
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.
//命令的请求者即发出者
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.
//客户端代码
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.
//运行结果