程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Command模式

Command模式

編輯:Delphi
 最近學習模式入迷, 所以就想寫一篇關於模式的文章,這篇文章是<<Java 與模式>> (閻宏 著)裡的一個例子, 我把它改成Delphi的.第一次寫東西, 有不足之處希望大家可以諒解.

  這個例子還是比較好理解的, 所以只給出代碼.

  unit pattern;

  interface

  uses Dialogs;

  type
    TAudioPlayer = class;

    TCommand = class
    public
      procedure execute; virtual; abstract;
    end;

    TPlayCommand = class(TCommand)
    private
      AudioPlayer: TAudioPlayer;
    public
      procedure execute; override;
      procedure Playcommand(AP: TAudioPlayer);
    end;

    TStopCommand = class(TCommand)
    private
      AudioPlayer: TAudioPlayer;
    public
      procedure execute; override;
      procedure StopComman(AP: TAudioPlayer);
    end;

    TRewindCommand = class(TCommand)
    private
      AudioPlayer: TAudioPlayer;
    public
      procedure execute; override;
      procedure RewindCommand(AP: TAudioPlayer);
    end;

    TKeyPad = class
    private
      PlayCommand: TCommand;
      StopCommand: TCommand;
      RewindCommand: TCommand;
    public
      constructor Create(PlayC, StopC, RewindC: TCommand); virtual;
      procedure play();
      procedure stop();
      procedure rewind();
    end;

    TAudioPlayer = class
    public
      procedure play();
      procedure stop();
      procedure rewind();
    end;

    TClIEnt = class
    private
      KeyPad: TKeyPad;
      AudioPlayer: TAudioPlayer;
    public
      constructor Create();
      procedure test();
    end;

  implementation

  { TKeyPad }

  constructor TKeyPad.Create(PlayC, StopC, RewindC: TCommand);
  begin
    PlayCommand := PlayC;
    StopCommand := StopC;
    RewindCommand := RewindC;
  end;

  procedure TKeyPad.play;
  begin
    PlayCommand.execute;
  end;

  procedure TKeyPad.rewind;
  begin
    RewindCommand.execute;
  end;

  procedure TKeyPad.stop;
  begin
    StopCommand.execute;
  end;

  { TAudioPlayer }

  procedure TAudioPlayer.play;
  begin
    ShowMessage('play');
  end;

  procedure TAudioPlayer.rewind;
  begin
    ShowMessage('rewind');
  end;

  procedure TAudioPlayer.stop;
  begin
    ShowMessage('stop');
  end;

  { TPlayCommand }

  procedure TPlayCommand.execute;
  begin
    inherited;
    AudioPlayer.play();
  end;

  procedure TPlayCommand.Playcommand(AP: TAudioPlayer);
  begin
    self.AudioPlayer := AP;
  end;

  { TRewindCommand }

  procedure TRewindCommand.execute;
  begin
    inherited;
    AudioPlayer.Rewind;
  end;

  procedure TRewindCommand.RewindCommand(AP: TAudioPlayer);
  begin
    AudioPlayer := ap;
  end;

  { TStopCommand }

  procedure TStopCommand.execute;
  begin
    inherited;
    AudioPlayer.Stop;
  end;

  procedure TStopCommand.StopComman(AP: TAudioPlayer);
  begin
    AudioPlayer := ap;
  end;

  { TClIEnt }

  constructor TClIEnt.Create;
  begin
    AudioPlayer := TAudioPlayer.Create();
  end;

  procedure TClIEnt.test;
  var
    PlayCommand: TCommand;
    StopCommand: TCommand;
    RewindCommand: TCommand;
  begin
    PlayCommand := TPlayCommand.Create;
    StopCommand := TStopCommand.Create;
    RewindCommand := TRewindCommand.Create;
    KeyPad := TKeyPad.Create(PlayCommand, StopCommand, RewindCommand);
    KeyPad.stop;
    KeyPad.play;
    KeyPad.rewind;
    KeyPad.Stop;
  end;

  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved