Command模式

莫小玲额

莫小玲额

2016-02-19 12:38

下面图老师小编要向大家介绍下Command模式,看起来复杂实则是简单的,掌握好技巧就OK,喜欢就赶紧收藏起来吧!

  最近学习模式入迷, 所以就想写一篇关于模式的文章,这篇文章是Java 与模式 (阎宏 著)里的一个例子, 我把它改成Delphi的.第一次写东西, 有不足之处希望大家可以谅解.

  这个例子还是比较好理解的, 所以只给出代码.

  unit pattern;

  interface

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  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;

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  end.
   

展开更多 50%)
分享

猜你喜欢

Command模式

编程语言 网络编程
Command模式

linux常用的command技巧

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
linux常用的command技巧

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

delphi中command/action的疑惑

编程语言 网络编程
delphi中command/action的疑惑

ASP入门基础教程-Command 对象

Web开发
ASP入门基础教程-Command 对象

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

document对象execCommand的command参数介绍

Web开发
document对象execCommand的command参数介绍

Ubuntu sudo报错command not found怎么办?

电脑入门
Ubuntu sudo报错command not found怎么办?

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

WPS文字技巧:有公式的行距也能调

WPS文字技巧:有公式的行距也能调

公布TstringGrid增强控件TcbStrGrid源码带CheckBox的TStringGr

公布TstringGrid增强控件TcbStrGrid源码带CheckBox的TStringGr
下拉加载更多内容 ↓