Delphi Command模式_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.
 

时间: 2024-10-22 07:28:21

Delphi Command模式_Delphi的相关文章

设计模式的解析和实现(C++)之十四-Command模式

作用: 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作. UML结构图: 解析: Comnand模式的思想是把命令封装在一个类中,就是这里的Command基类,同时把接收对象也封装在一个类中就是这里的Receiver类中,由调用这个命令的类也就是这里的Invoker类来调用.其实,如果弄清楚了Command模式的原理,就会发现其实它和注册回调函数的原理是很相似的,而在面向过程的设计中的回调函数其实和这里的Command类的作用是一

设计模式学习笔记(十四)—Command模式

一.Command模式定义: 将一个请求封装为一个对象,从而使你不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤销的操作. 二.模式解说 Commad模式是一种对象行为模式,它可以对发送者(sender)和接收者(receiver)完全解耦(decoupling).("发送者" 是请求操作的对象,"接收者" 是接收请求并执行某操作的对象.有了 "解耦",发送者对接收者的接口一无所知.)这里,"请求"(requ

Java设计模式之命令模式(Command模式)介绍_java

Command模式是最让我疑惑的一个模式,我在阅读了很多代码后,才感觉隐约掌握其大概原理,我认为理解设计模式最主要是掌握起原理构造,这样才对自己实际编程有指导作用.Command模式实际上不是个很具体,规定很多的模式,正是这个灵活性,让人有些confuse. Command定义 不少Command模式的代码都是针对图形界面的,它实际就是菜单命令,我们在一个下拉菜单选择一个命令时,然后会执行一些动作. 将这些命令封装成在一个类中,然后用户(调用者)再对这个类进行操作,这就是Command模式,换句

用Javascript实现Command模式

command|javascript 这个实现实在太简单了---动态语言就是好使啊~先定义一个Command对象,代码如下: function Command(obj) {    var commandObj = obj;       // save the reference of working object    var oldProp = new Object(); // save old properties         // set new properties and save

ListView 百分比进度条(delphi版)_Delphi

在看代码之前先给大家附上效果图: 废话不多说了,直接给大家贴代码了. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ImgList; type TForm1 = class(TForm) btn1: TButton; lv1: TListView; trckbr1: TTrackBa

Command 模式

将一个请求封装成为一个对象,从而使你可用不同的对象对客户进行参数化: 对请求排队或记录请求日志,以及支持可撤消的操作.   当处理菜单时,若直接关联上函数,则会导致紧耦合.当将菜单某个功能与一个具体的命令类关联上时,则会相对清晰.也便于扩展.

022_《Delphi模式编程》

<Delphi模式编程> Delphi 教程 系列书籍 (022) <Delphi模式编程> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: Pdf   作者: 刘艺 丛书名: Borland/Inprise核心技术丛书 出版社:机械工业出版社 ISBN:7111149491 上架时间:2004-9-11 出版日期:2004 年9月 开本:16开 页码:509 版次:1-1 内容简介 <delphi模式编程>是一本delphi程序员的模式入门和

解读设计模式----命令模式(Command Pattern)

本文与作者原文有一定的偏差,其中加入了一部分是个人看法,详细请查看作者原文.*** 原文连接http://www.dofactory.com/Patterns/PatternCommand.aspx 命令模式意图: GOF 在<设计模式>一书中阐述其意图:"将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可取消的操作."这里所谓的"不同的请求"也既意味着请求可能发生的变化,是一个可能扩展的功能点. 命令

.NET设计模式(17):命令模式(Command Pattern)

意图 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤消的操作.[GOF <设计模式>] 结构图 Command模式结构图如下: 图1 Command模式结构图 生活中的例子 Command模式将一个请求封装为一个对象,从而使你可以使用不同的请求对客户进行参数化.用餐时的账单是Command模式的一个例子.服务员接受顾客的点单,把它记在账单上封装.这个点单被排队等待烹饪.注意这里的"账单"是不依赖于菜单的,它可以被不同