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. 运行结果: