Delphi Command模式
<br>这个例子还是比较好理解的, 所以只给出代码.<br>unit pattern;<br>interface<br>uses Dialogs;<br>type<br> TAudioPlayer = class;<br> TCommand = class<br> public<br> procedure execute; virtual; abstract;<br> end;<br> TPlayCommand = class(TCommand)<br> private<br> AudioPlayer: TAudioPlayer;<br> public<br> procedure execute; override;<br> procedure Playcommand(AP: TAudioPlayer);<br> end;<br> TStopCommand = class(TCommand)<br> private<br> AudioPlayer: TAudioPlayer;<br> public<br> procedure execute; override;<br> procedure StopComman(AP: TAudioPlayer);<br> end;<br> TRewindCommand = class(TCommand)<br> private<br> AudioPlayer: TAudioPlayer;<br> public<br> procedure execute; override;<br> procedure RewindCommand(AP: TAudioPlayer);<br> end;<br> TKeyPad = class<br> private<br> PlayCommand: TCommand;<br> StopCommand: TCommand;<br> RewindCommand: TCommand;<br> public<br> constructor Create(PlayC, StopC, RewindC: TCommand); virtual;<br> procedure play();<br> procedure stop();<br> procedure rewind();<br> end;<br> TAudioPlayer = class<br> public<br> procedure play();<br> procedure stop();<br> procedure rewind();<br> end;<br> TClient = class<br> private<br> KeyPad: TKeyPad;<br> AudioPlayer: TAudioPlayer;<br> public<br> constructor Create();<br> procedure test();<br> end;<br>implementation<br>{ TKeyPad }<br>constructor TKeyPad.Create(PlayC, StopC, RewindC: TCommand);<br>begin<br> PlayCommand := PlayC;<br> StopCommand := StopC;<br> RewindCommand := RewindC;<br>end;<br>procedure TKeyPad.play;<br>begin<br> PlayCommand.execute;<br>end;<br>procedure TKeyPad.rewind;<br>begin<br> RewindCommand.execute;<br>end;<br>procedure TKeyPad.stop;<br>begin<br> StopCommand.execute;<br>end;<br>{ TAudioPlayer }<br>procedure TAudioPlayer.play;<br>begin<br> ShowMessage(´play´);<br>end;<br>procedure TAudioPlayer.rewind;<br>begin<br> ShowMessage(´rewind´);<br>end;<br>procedure TAudioPlayer.stop;<br>begin<br> ShowMessage(´stop´);<br>end;<br>{ TPlayCommand }<br>procedure TPlayCommand.execute;<br>begin<br> inherited;<br> AudioPlayer.play();<br>end;<br>procedure TPlayCommand.Playcommand(AP: TAudioPlayer);<br>begin<br> self.AudioPlayer := AP;<br>end;<br>{ TRewindCommand }<br>procedure TRewindCommand.execute;<br>begin<br> inherited;<br> AudioPlayer.Rewind;<br>end;<br>procedure TRewindCommand.RewindCommand(AP: TAudioPlayer);<br>begin<br> AudioPlayer := ap;<br>end;<br>{ TStopCommand }<br>procedure TStopCommand.execute;<br>begin<br> inherited;<br> AudioPlayer.Stop;<br>end;<br>procedure TStopCommand.StopComman(AP: TAudioPlayer);<br>begin<br> AudioPlayer := ap;<br>end;<br>{ TClient }<br>constructor TClient.Create;<br>begin<br> AudioPlayer := TAudioPlayer.Create();<br>end;<br>procedure TClient.test;<br>var<br> PlayCommand: TCommand;<br> StopCommand: TCommand;<br> RewindCommand: TCommand;<br>begin<br> PlayCommand := TPlayCommand.Create;<br> StopCommand := TStopCommand.Create;<br> RewindCommand := TRewindCommand.Create;<br> KeyPad := TKeyPad.Create(PlayCommand, StopCommand, RewindCommand);<br> KeyPad.stop;<br> KeyPad.play;<br> KeyPad.rewind;<br> KeyPad.Stop;<br>end;<br>end.<br> <div class="art_xg">
<b>您可能感兴趣的文章:</b><ul><li>用Command对象和RecordSet对象向数据库增加记录哪一个更好</li><li>使用Jmail及Winwebmail发信时系统记录中的错误:502 Error: command ...</li><li>asp中command的在单条记录时,有些字段显示为空的问题</li><li>javascript document.execCommand() 常用解析</li><li>asp.net gridview的Rowcommand命令中获取行索引的方法总结</li><li>php设计模式Command(命令模式)</li><li>php设计模式 Command(命令模式)</li><li>获取Repeter的Item和ItemIndex/CommandArgument实现思路与代码</li><li>解决VS2012 Express的There was a problem sending the command to the program问题</li><li>bash scp command not found的解决方法</li><li>GridView中动态设置CommandField是否可用或可见的小例子</li><li>document.execCommand()的用法小结</li><li>pip 错误unused-command-line-argument-hard-error-in-future解决办法</li><li>在RowCommand事件中获取索引值示例代码</li><li>ON_COMMAND_RANGE多个按钮响应一个函数的解决方法</li><li>C#命令模式(Command Pattern)实例教程</li><li>ASP基础知识Command对象讲解</li></ul>
</div>
</div>
<!--endmain-->
頁:
[1]