zoukankan      html  css  js  c++  java
  • Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---命令模式之SimpleRemoteControlTest [转]

    //命令的接受者

    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.

    //运行结果

     
     
  • 相关阅读:
    在UI上使用BackgroundWorker
    洛谷训练新手村之“洛谷的第一个任务”题解
    洛谷训练新手村之“循环!循环!循环!”题解
    洛谷训练新手村之“BOSS战入门综合练习1”题解
    洛谷训练新手村之“过程函数与递归”题解
    洛谷P1720 月落乌啼算钱 题解 斐波那契数列/特征方程求解
    洛谷训练新手村之“顺序与分支”题解
    洛谷训练新手村之“数组”题解
    [转]特征方程
    洛谷训练新手村之“简单字符串”题解
  • 原文地址:https://www.cnblogs.com/0x2D-0x22/p/4076157.html
Copyright © 2011-2022 走看看