Command模式

2016-02-19 12:38 7 1 收藏

下面图老师小编要向大家介绍下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;

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

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

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

  { TAudioPlayer }

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

  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

延伸阅读
标签: ASP
  我们在 ASP 中调用 SQL Server 的存储过程时,如果使用 Adodb.Command 对象,通常使用如下的代码: dim cmd, rs set cmd = Server.CreateObject("ADODB.Command") cmd.ActiveConnection = conn cmd.CommandType = adCmdStoredProc cmd.CommandText = "TestProc" cmd.Parameters.Append cmd.CreateParameter("@a" , adInteger, adPara...
标签: 电脑入门
有些用户因为不熟悉MAC键盘,因而想将PC键盘连接到MAC电脑中,这样虽然可以让用户们更快捷的进行一些操作,不过对于command、fn 等功能键,则让这部分用户吃尽了苦头。那么如何才能在PC键盘中很快的找出这些功能键呢?现在系统之家就教你一个简单的设置方法。 MAC接入PC键盘后正常使用command等功能键方法: 点击 Mac 屏幕左上角的苹果...
描述: 计数代理模式在客户对象调用服务提供者对象上方法的前后执行诸如日志(logging)和计数(counting)一系列附加功能时很有用。 !-- frame contents -- !-- /frame contents -- 计数代理模式建议把这些附加功能封装在一个单独的对象,这个对象就是指计数代理对象,而不是把这些附加的功能实现放到服务提供者的内部。...
标签: 网络游戏
《反恐行动》MAT新模式-闯关模式 注意,这次我写的这篇文章是建立在赏金任务之上,自己新加了几个图和改进。 闯关模式,就是打了这一关才能打下一关。 第一关:9.16事变,无需改进。。。。 第二关:血战靶场,无需改进。。。。 第三关:西域擒王,必改【这张图难度太大,而且那个队长又像个2b+乌龟,躲在家不出来,有人...
Delphi模式编程之策略模式刘 艺 1.1                         模式解说策略(Strategy)模式的用意是定义一组算法(algorithms),并将每个算法封装到具有共同接口的独立的类中,从而使它们可以相互替换。策略模式让...

经验教程

522

收藏

16
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部