下面图老师小编要向大家介绍下Command模式,看起来复杂实则是简单的,掌握好技巧就OK,喜欢就赶紧收藏起来吧!
【 tulaoshi.com - 编程语言 】
最近学习模式入迷, 所以就想写一篇关于模式的文章,这篇文章是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;
  end.
   
来源:http://www.tulaoshi.com/n/20160219/1601357.html