《GOF设计模式》—职责链(CHAIN OF RESPONSIBILITY)—Delphi源码示例:职责链接口

示例:职责链接口

说明:

1)、定义

使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

2)、结构

对象:

* Handler:处理对象。定义一个处理请求的接口。(可选)实现后继链。

* ConcreteHandler:具体处理对象。处理它所负责的请求。可访问它的后继者。如果可处理该请求,就处理之;否则将该请求转发给它的后继者。

客户端:

Client:向链上的具体处理者(ConcreteHandler)对象提交请求。

代码:

unit uChainOfResponsibility;

 

interface

 

uses

    Dialogs;

 

type

    THandler = class

    private

        FSuccessor: THandler;

    public

        constructor Create(const ASuccessor: THandler = nil);

        //---

        procedure HandleRequest; virtual;

    end;

    TConcreteHandler1 = class(THandler)

    public

        procedure HandleRequest; override;

    end;

    TConcreteHandler2 = class(THandler)

    public

        procedure HandleRequest; override;

    end;

 

implementation

 

constructor THandler.Create(const ASuccessor: THandler = nil);

begin

    FSuccessor := ASuccessor;

end;

 

procedure THandler.HandleRequest;

begin

    if assigned(FSuccessor) then

        FSuccessor.HandleRequest

end;

 

procedure TConcreteHandler1.HandleRequest;

begin

    ShowMessage('ConcreteHandler1');

    //---

    inherited;

end;

 

procedure TConcreteHandler2.HandleRequest;

begin

    ShowMessage('ConcreteHandler2');

    //---

    inherited;

end;

 

end.

 

procedure TForm1.Button1Click(Sender: TObject);

var

    AHandler1: TConcreteHandler1;

    AHandler2: TConcreteHandler2;

begin

    AHandler2 := TConcreteHandler2.Create;

    AHandler1 := TConcreteHandler1.Create(AHandler2);

    try

        AHandler1.HandleRequest;

    finally

        AHandler1.Free;

        AHandler2.Free;

    end;

end;

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值