建站资讯

Delphi Command模式

作者:admin 发布时间:2020-08-03

这个例子还是比较好理解的, 所以只给出代码.
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&mand(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 mand(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.
 

收缩