Command模式

原创 2004年05月28日 14:59:00

最近学习模式入迷, 所以就想写一篇关于模式的文章,这篇文章是<<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.
 

操作型模式之Command(命令)模式

1.如果你期望把方法调用封装在对象中,可使用Command(命令)模式 2.举例//命令接口 public interface Command { void exe(); }//命令抽象类:...
  • u014686875
  • u014686875
  • 2016年04月09日 13:30
  • 589

设计模式-----COMMAND模式

COMMAND模式是最简单,最优雅的设计模式之一。COMMAND模式的使用范围非常宽广。 COMMAND模式通过对命令的封装接触了系统的逻辑互联关系和实际连接的设备之间的耦合。简单的说就是COMMA...
  • u013812682
  • u013812682
  • 2016年11月28日 16:44
  • 384

一个Command模式的应用例子

我曾经写过一个小软件,故事是这样的:我们公司有一些设备在外面运行,有一天我接到一个任务,要求我编写一个算法对系统进行控制,改善系统的性能。根据大家的讨论很快制订了算法,我也很快编码完毕。但问题来了...
  • chenjiazhou
  • chenjiazhou
  • 2005年08月24日 20:55
  • 1105

Command模式详解--设计模式(19)

Memento模式来源:       Command模式通过将请求封装到一个对象(Command)中,并将请求的接受者存放到具体的ConcreteCommand类中(Receiver)中,从而实现调用...
  • fanyun_01
  • fanyun_01
  • 2016年07月06日 08:58
  • 1564

设计模式-command模式

定义命令模式   命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。命令对象将动作和接收者包进对象中。 应用场景   在面向对象的软件设计中...
  • u010786109
  • u010786109
  • 2015年05月19日 10:23
  • 919

浅谈JAVA设计模式之——命令模式(Command)

一、概述 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。 二、适用性 1.抽象出待执行的动作以参数化某对象。 2.在不同的时刻指...
  • l1028386804
  • l1028386804
  • 2015年05月08日 00:22
  • 4066

命令处理器模式(Command Processor)的思考

命令处理器模式(Command Processor)的思考 1.Command Processor模式的概述 具体请参考GOF或者POSA1。 2.思考 1.对于每个命令要求的参数怎么...
  • beafather
  • beafather
  • 2012年01月23日 12:53
  • 951

深入浅出设计模式(十三):21.观察者模式(Observer)22.命令模式(Command)23.备忘录模式(Memento)

21.观察者模式(Observer)每个月当银行发放工资时,都会有短信自动通知员工,员工就相当于观察者,账户就是被观察者,当账户余额有变动时,会自动通知观察者,这就是观察者模式的实际应用。哪里会使用到...
  • liuquan0071
  • liuquan0071
  • 2016年02月24日 15:01
  • 794

Linux进入root模式很多命令提示Found No Command

如果新装的系统,运行一些很正常的诸如:shutdown,fdisk的命令时,悍然提示:bash:command not found。那么  首先就要考虑root 的$PATH里是否已经包含了这些环境...
  • u012247980
  • u012247980
  • 2016年10月07日 11:51
  • 569

【C#设计模式-命令模式】

一.定义: 命令模式是将一类对象的功能操作进行抽象,一般来说,这些对象有相同的方法,所以这类对象有着类似的操作,我们通过抽象,就可以定义出一个命令对象,通过这样的方式,用户程序在使用的时候,只与该命令...
  • heyangyi_19940703
  • heyangyi_19940703
  • 2016年05月04日 15:06
  • 963
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Command模式
举报原因:
原因补充:

(最多只允许输入30个字)