欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Delphi VCL Framework中的Action模式

程序员文章站 2022-06-07 08:54:25
...

学习过设计模式的人都知道有一种行为模式叫做Command模式。在Delphi的VCL Framework中也使用到了这种模式,那就是Action模式。

命令模式使用的目的在于使用对象来封装客户端的请求命令,由于使用以对象封装,因此可以达到下面的效果:

  • 请求对象可结合多态以及虚拟方法来提供更大的弹性;
  • 负责执行请求的目的对象可以和客户端分离,这就表示多个客户端可以发生相同的请求对象,例如菜单或是工具栏按钮都可以发生打开文件的请求,如此一来菜单和工具栏按钮便可以使用相同的请求对象,而负责打开文件的程序代码并不会绑定到单一的菜单项或是工具栏按钮;
  • 由于使用了请求对象,因此不单是图形用户界面可以触发请求,一般的程序代码也可以通过请求对象来执行特定的工作;
  • 由于请求对象可以使用一个完整的类架构来实现,因此可以让客户端使用一致的程序代码格式来触发各种不同的请求。

实现

在Delphi的Classes单元中提供了Action设计模式的实现类和程序代码。

Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 TBasicAction=class(TComponent)
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
private
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 FActionComponent:TComponent;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 FOnChange:TNotifyEvent;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 FOnExecute:TNotifyEvent;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 FOnUpdate:TNotifyEvent;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 procedureSetActionComponent(
constValue:TComponent);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
protected
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 FClients:TList;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 procedureChange;
virtual;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 procedureSetOnExecute(Value:TNotifyEvent);
virtual;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 propertyOnChange:TNotifyEventreadFOnChangewriteFOnChange;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 procedureNotification(AComponent:TComponent;Operation:TOperation);
override;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
public
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 constructorCreate(AOwner:TComponent);
override;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 destructorDestroy;
override;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 functionHandlesTarget(Target:TObject):Boolean;
virtual;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 procedureUpdateTarget(Target:TObject);
virtual;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 procedureExecuteTarget(Target:TObject);
virtual;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 functionExecute:Boolean;dynamic;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 procedureRegisterChanges(Value:TBasicActionLink);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 procedureUnRegisterChanges(Value:TBasicActionLink);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 functionUpdate:Boolean;
virtual;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 propertyActionComponent:TComponentreadFActionComponentwriteSetActionComponent;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 propertyOnExecute:TNotifyEventreadFOnExecutewriteSetOnExecute;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 propertyOnUpdate:TNotifyEventreadFOnUpdatewriteFOnUpdate;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
...{TBasicAction}
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 constructorTBasicAction.Create(AOwner:TComponent);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 begin
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 inheritedCreate(AOwner);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 FClients:
=TList.Create;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 destructorTBasicAction.Destroy;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 begin
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 inheritedDestroy;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
ifAssigned(ActionComponent)then
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 ActionComponent.RemoveFreeNotification(Self);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
whileFClients.Count>0do
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 UnRegisterChanges(TBasicActionLink(FClients.Last));
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 FreeAndNil(FClients);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 functionTBasicAction.HandlesTarget(Target:TObject):Boolean;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 begin
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 Result:
=False;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 procedureTBasicAction.ExecuteTarget(Target:TObject);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 begin
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 procedureTBasicAction.Notification(AComponent:TComponent;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 Operation:TOperation);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 begin
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 inheritedNotification(AComponent,Operation);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
if(Operation=opRemove)and(AComponent=ActionComponent)then
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 FActionComponent:
=nil;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 procedureTBasicAction.UpdateTarget(Target:TObject);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 begin
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 functionTBasicAction.Execute:Boolean;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 begin
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
ifAssigned(FOnExecute)then
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 begin
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 FOnExecute(Self);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 Result:
=True;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
elseResult:=False;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 functionTBasicAction.Update:Boolean;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 begin
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
ifAssigned(FOnUpdate)then
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 begin
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 FOnUpdate(Self);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 Result:
=True;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
elseResult:=False;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 procedureTBasicAction.SetOnExecute(Value:TNotifyEvent);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 var
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 I:Integer;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 begin
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
if(TMethod(Value).Code<>TMethod(OnExecute).Code)or
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 (TMethod(Value).Data
<>TMethod(OnExecute).Data)then
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 begin
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
forI:=0toFClients.Count-1do
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 TBasicActionLink(FClients[I]).SetOnExecute(Value);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 FOnExecute:
=Value;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 Change;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 procedureTBasicAction.Change;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 begin
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
ifAssigned(FOnChange)thenFOnChange(Self);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 procedureTBasicAction.RegisterChanges(Value:TBasicActionLink);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 begin
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 Value.FAction:
=Self;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 FClients.Add(Value);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 procedureTBasicAction.UnRegisterChanges(Value:TBasicActionLink);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 var
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 I:Integer;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 begin
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
forI:=0toFClients.Count-1do
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
ifFClients[I]=Valuethen
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 begin
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 Value.FAction:
=nil;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 FClients.Delete(I);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 Break;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 procedureTBasicAction.SetActionComponent(
constValue:TComponent);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 begin
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
ifFActionComponent<>Valuethen
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 begin
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
ifAssigned(FActionComponent)then
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 FActionComponent.RemoveFreeNotification(Self);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 FActionComponent:
=Value;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
ifAssigned(FActionComponent)then
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 FActionComponent.FreeNotification(Self);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end;

TBasicAction类中声明了三个关键的虚护方法以及一个关键的动态方法。

Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 functionHandlesTarget(Target:TObject):Boolean;virtual;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 procedureUpdateTarget(Target:TObject);
virtual;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 procedureExecuteTarget(Target:TObject);
virtual;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 functionExecute:Boolean;dynamic;

其中的动态方法Execute可以由TBasicActionLink类或是TBasicActionLink的派生类或是客户端程序代码调用,而该方法则会执行程序员在它的OnExecute事件中编写的事件处理程序。对于TBasicAction的派生类而言,例如处理Paste动作的TEditPase类,就可以改写HandlerTarget虚方法,并且在其中编写执行粘贴的程序代码。

Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 TEditPaste=class(TEditAction)
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
public
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 procedureUpdateTarget(Target:TObject);
override;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 procedureExecuteTarget(Target:TObject);
override;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end;
 
{ TEditPaste }
procedure TEditPaste.ExecuteTarget(Target: TObject);
begin
GetControl(Target).PasteFromClipboard;
end;
procedure TEditPaste.UpdateTarget(Target: TObject);
begin
Enabled := Clipboard.HasFormat(CF_TEXT);
end;

因此,当我们要使用Action设计模式时,可以编写TBasicAction的派生类,并且改写ExecuteTarget虚方法,就像上面提到的TEditPaste类一样。或是实现企业逻辑程序代码并且把它指定给TBasicAction类的OnExecute事件,然后再调用Execute虚方法。

我们通过继承TBasicAction类实现了请求对象类,那么如何将客户端与这些请求对象建立关联呢?这里就用到了TBasicActionLink。

Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 TBasicActionLink=class(TObject)
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
private
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 FOnChange:TNotifyEvent;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
protected
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 FAction:TBasicAction;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 procedureAssignClient(AClient:TObject);
virtual;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 procedureChange;
virtual;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 functionIsOnExecuteLinked:Boolean;
virtual;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 procedureSetAction(Value:TBasicAction);
virtual;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 procedureSetOnExecute(Value:TNotifyEvent);
virtual;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
public
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 constructorCreate(AClient:TObject);
virtual;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 destructorDestroy;
override;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 functionExecute(AComponent:TComponent
=nil):Boolean;virtual;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 functionUpdate:Boolean;
virtual;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 propertyAction:TBasicActionreadFActionwriteSetAction;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 propertyOnChange:TNotifyEventreadFOnChangewriteFOnChange;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
...{TBasicActionLink}
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 constructorTBasicActionLink.Create(AClient:TObject);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 begin
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 inheritedCreate;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 AssignClient(AClient);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 procedureTBasicActionLink.AssignClient(AClient:TObject);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 begin
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 destructorTBasicActionLink.Destroy;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 begin
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
ifFAction<>nilthenFAction.UnRegisterChanges(Self);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 inheritedDestroy;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 procedureTBasicActionLink.Change;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 begin
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
ifAssigned(OnChange)thenOnChange(FAction);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 functionTBasicActionLink.Execute(AComponent:TComponent):Boolean;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 begin
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 FAction.ActionComponent:
=AComponent;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 Result:
=FAction.Execute;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 procedureTBasicActionLink.SetAction(Value:TBasicAction);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 begin
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
ifValue<>FActionthen
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 begin
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
ifFAction<>nilthenFAction.UnRegisterChanges(Self);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 FAction:
=Value;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
ifValue<>nilthenValue.RegisterChanges(Self);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 functionTBasicActionLink.IsOnExecuteLinked:Boolean;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 begin
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 Result:
=True;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 procedureTBasicActionLink.SetOnExecute(Value:TNotifyEvent);
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 begin
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 functionTBasicActionLink.Update:Boolean;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 begin
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 Result:
=FAction.Update;
Delphi VCL Framework中的Action模式
            
    
    博客分类: Delphi delphi设计模式 end;

在上面的代码中我们可以看到TBasicActionLink的Execute方法实际上也就是调用了TBasicAction对象的虚方法Execute来负责响应客户端的请求。

应用举例

在通常的UI设计中,我们会在Form上放置一些菜单项,同时会把部分使用频率较高的功能以工具栏形式提供给用户。这些工具栏按钮实现的功能与菜单项完全相同,我们就可以使用Action模式来设计这些请求,然后将菜单项和工具栏按钮与这些Action对象对立关联即可。即使以后在用户界面上增加其它形式的调用,如上下文菜单,或是快捷键等,都可以直接与这些请求对象建立关联。可以很轻松地扩充用户发出请求的方式。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关标签: delphi 设计模式