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