纵横无界 發表於 2008-3-15 18:15:04

Delphi Command模式

<br>这个例子还是比较好理解的,&nbsp;所以只给出代码.<br>unit&nbsp;pattern;<br>interface<br>uses&nbsp;Dialogs;<br>type<br>&nbsp;&nbsp;TAudioPlayer&nbsp;=&nbsp;class;<br>&nbsp;&nbsp;TCommand&nbsp;=&nbsp;class<br>&nbsp;&nbsp;public<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;execute;&nbsp;virtual;&nbsp;abstract;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;TPlayCommand&nbsp;=&nbsp;class(TCommand)<br>&nbsp;&nbsp;private<br>&nbsp;&nbsp;&nbsp;&nbsp;AudioPlayer:&nbsp;TAudioPlayer;<br>&nbsp;&nbsp;public<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;execute;&nbsp;override;<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;Playcommand(AP:&nbsp;TAudioPlayer);<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;TStopCommand&nbsp;=&nbsp;class(TCommand)<br>&nbsp;&nbsp;private<br>&nbsp;&nbsp;&nbsp;&nbsp;AudioPlayer:&nbsp;TAudioPlayer;<br>&nbsp;&nbsp;public<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;execute;&nbsp;override;<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;StopComman(AP:&nbsp;TAudioPlayer);<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;TRewindCommand&nbsp;=&nbsp;class(TCommand)<br>&nbsp;&nbsp;private<br>&nbsp;&nbsp;&nbsp;&nbsp;AudioPlayer:&nbsp;TAudioPlayer;<br>&nbsp;&nbsp;public<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;execute;&nbsp;override;<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;RewindCommand(AP:&nbsp;TAudioPlayer);<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;TKeyPad&nbsp;=&nbsp;class<br>&nbsp;&nbsp;private<br>&nbsp;&nbsp;&nbsp;&nbsp;PlayCommand:&nbsp;TCommand;<br>&nbsp;&nbsp;&nbsp;&nbsp;StopCommand:&nbsp;TCommand;<br>&nbsp;&nbsp;&nbsp;&nbsp;RewindCommand:&nbsp;TCommand;<br>&nbsp;&nbsp;public<br>&nbsp;&nbsp;&nbsp;&nbsp;constructor&nbsp;Create(PlayC,&nbsp;StopC,&nbsp;RewindC:&nbsp;TCommand);&nbsp;virtual;<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;play();<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;stop();<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;rewind();<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;TAudioPlayer&nbsp;=&nbsp;class<br>&nbsp;&nbsp;public<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;play();<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;stop();<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;rewind();<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;TClient&nbsp;=&nbsp;class<br>&nbsp;&nbsp;private<br>&nbsp;&nbsp;&nbsp;&nbsp;KeyPad:&nbsp;TKeyPad;<br>&nbsp;&nbsp;&nbsp;&nbsp;AudioPlayer:&nbsp;TAudioPlayer;<br>&nbsp;&nbsp;public<br>&nbsp;&nbsp;&nbsp;&nbsp;constructor&nbsp;Create();<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;test();<br>&nbsp;&nbsp;end;<br>implementation<br>{&nbsp;TKeyPad&nbsp;}<br>constructor&nbsp;TKeyPad.Create(PlayC,&nbsp;StopC,&nbsp;RewindC:&nbsp;TCommand);<br>begin<br>&nbsp;&nbsp;PlayCommand&nbsp;:=&nbsp;PlayC;<br>&nbsp;&nbsp;StopCommand&nbsp;:=&nbsp;StopC;<br>&nbsp;&nbsp;RewindCommand&nbsp;:=&nbsp;RewindC;<br>end;<br>procedure&nbsp;TKeyPad.play;<br>begin<br>&nbsp;&nbsp;PlayCommand.execute;<br>end;<br>procedure&nbsp;TKeyPad.rewind;<br>begin<br>&nbsp;&nbsp;RewindCommand.execute;<br>end;<br>procedure&nbsp;TKeyPad.stop;<br>begin<br>&nbsp;&nbsp;StopCommand.execute;<br>end;<br>{&nbsp;TAudioPlayer&nbsp;}<br>procedure&nbsp;TAudioPlayer.play;<br>begin<br>&nbsp;&nbsp;ShowMessage(&acute;play&acute;);<br>end;<br>procedure&nbsp;TAudioPlayer.rewind;<br>begin<br>&nbsp;&nbsp;ShowMessage(&acute;rewind&acute;);<br>end;<br>procedure&nbsp;TAudioPlayer.stop;<br>begin<br>&nbsp;&nbsp;ShowMessage(&acute;stop&acute;);<br>end;<br>{&nbsp;TPlayCommand&nbsp;}<br>procedure&nbsp;TPlayCommand.execute;<br>begin<br>&nbsp;&nbsp;inherited;<br>&nbsp;&nbsp;AudioPlayer.play();<br>end;<br>procedure&nbsp;TPlayCommand.Playcommand(AP:&nbsp;TAudioPlayer);<br>begin<br>&nbsp;&nbsp;self.AudioPlayer&nbsp;:=&nbsp;AP;<br>end;<br>{&nbsp;TRewindCommand&nbsp;}<br>procedure&nbsp;TRewindCommand.execute;<br>begin<br>&nbsp;&nbsp;inherited;<br>&nbsp;&nbsp;AudioPlayer.Rewind;<br>end;<br>procedure&nbsp;TRewindCommand.RewindCommand(AP:&nbsp;TAudioPlayer);<br>begin<br>&nbsp;&nbsp;AudioPlayer&nbsp;:=&nbsp;ap;<br>end;<br>{&nbsp;TStopCommand&nbsp;}<br>procedure&nbsp;TStopCommand.execute;<br>begin<br>&nbsp;&nbsp;inherited;<br>&nbsp;&nbsp;AudioPlayer.Stop;<br>end;<br>procedure&nbsp;TStopCommand.StopComman(AP:&nbsp;TAudioPlayer);<br>begin<br>&nbsp;&nbsp;AudioPlayer&nbsp;:=&nbsp;ap;<br>end;<br>{&nbsp;TClient&nbsp;}<br>constructor&nbsp;TClient.Create;<br>begin<br>&nbsp;&nbsp;AudioPlayer&nbsp;:=&nbsp;TAudioPlayer.Create();<br>end;<br>procedure&nbsp;TClient.test;<br>var<br>&nbsp;&nbsp;PlayCommand:&nbsp;TCommand;<br>&nbsp;&nbsp;StopCommand:&nbsp;TCommand;<br>&nbsp;&nbsp;RewindCommand:&nbsp;TCommand;<br>begin<br>&nbsp;&nbsp;PlayCommand&nbsp;:=&nbsp;TPlayCommand.Create;<br>&nbsp;&nbsp;StopCommand&nbsp;:=&nbsp;TStopCommand.Create;<br>&nbsp;&nbsp;RewindCommand&nbsp;:=&nbsp;TRewindCommand.Create;<br>&nbsp;&nbsp;KeyPad&nbsp;:=&nbsp;TKeyPad.Create(PlayCommand,&nbsp;StopCommand,&nbsp;RewindCommand);<br>&nbsp;&nbsp;KeyPad.stop;<br>&nbsp;&nbsp;KeyPad.play;<br>&nbsp;&nbsp;KeyPad.rewind;<br>&nbsp;&nbsp;KeyPad.Stop;<br>end;<br>end.<br>&nbsp;
                           
                            <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]
查看完整版本: Delphi Command模式