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