//命令的接受者
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.//运行结果