Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---命令模式之SimpleRemoteControlTest
Posted on 2009-05-02 22:38 都市牧羊 阅读(1085) 评论(0) 收藏 举报
//命令的接受者
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.
//运行结果
 
                     
                    
                 
                    
                 
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号