Delphi 设计模式:《HeadFirst设计模式》---行为模式之责任链模式

模式解说
  责任链模式是一种对象的行为模式,它将处理客户端请求的那些对象联成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。
通常使用在以下场合
  1 有多个对象可以处理一个请求,哪个对象处理该请求事先并不知道,而是在运行时自动确定;
  2 希望在不明确制定接收者的情况下,向多个对象中的一个提交请求;
  3 处理一个请求的对象集合需要动态指定时;
16.2 结构和用法
  1.抽象处理者(THandler)-定义了一个处理请求的接口。如果需要,则声明一个方法,实现对后续对象的链接;
  2.具体处理者(TConcreteHandler)-负责处理求;链接后续对象,如果它能处理该请求,则处理,如果不能,则传递给其链接对象处理;
  3.客户端(TClient)-发出请求给责任链中的具体处理对象;

代码示例:
unit Chain;

interface

type

  THandler = class
  private
    FSuccessor: THandler;
    procedure SetSuccessor(const Value: THandler);
  public
    procedure HandleRequest; virtual; abstract;
    property Successor: THandler read FSuccessor write SetSuccessor;
  end;

  TConcreteHandler1 = class(THandler)
  public
    procedure HandleRequest; override;
  end;

  TConcreteHandler2 = class(THandler)
  public
    procedure HandleRequest; override;
  end;

implementation
uses Dialogs;

{ Thandler }

procedure THandler.SetSuccessor(const Value: THandler);
begin
  FSuccessor := Value;
end;

{ TConcreteHandler2 }

procedure TConcreteHandler2.HandleRequest;
begin
  inherited;
  if Successor <> nil then
  begin
    ShowMessage(self.ClassName +  ‘将请求传递到 ‘ +  Successor.ClassName);
    Successor.HandleRequest;
  end
  else
  begin
    ShowMessage(self.ClassName + ‘ 处理了请求!‘);
  end;
end;

{ TConcreteHandler1 }

procedure TConcreteHandler1.HandleRequest;
begin
  inherited;
  if Successor <> nil then
  begin
    ShowMessage(self.ClassName +  ‘将请求传递到 ‘ +  Successor.ClassName);
    Successor.HandleRequest;
  end
  else
  begin
    ShowMessage(self.ClassName + ‘ 处理了请求!‘);
  end;
end;

end.

客户端代码

unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    OtherDone: TButton;
    SelfDone: TButton;
    procedure OtherDoneClick(Sender: TObject);
    procedure SelfDoneClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses Chain;

{$R *.dfm}

procedure TForm1.OtherDoneClick(Sender: TObject);
var
  Handler1, Handler2: THandler;
begin
  Handler1 := TConcreteHandler1.Create;
  Handler2 := TConcreteHandler1.Create;
  try
    Handler1.Successor := Handler2;
    Handler1.HandleRequest;
  finally
    Handler1.Free;
    Handler2.Free;
  end;
end;

procedure TForm1.SelfDoneClick(Sender: TObject);
var
  Handler1, Handler2: THandler;
begin
  Handler1 := TConcreteHandler1.Create;
  Handler2 := TConcreteHandler1.Create;
  try
    Handler1.HandleRequest;
  finally
    Handler1.Free;
    Handler2.Free;
  end;
end;

end.
时间: 2024-07-30 07:13:52

Delphi 设计模式:《HeadFirst设计模式》---行为模式之责任链模式的相关文章

设计模式学习笔记(六:责任链模式)

1.1概述 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止.这就是责任链模式. 责任链模式是使用多个对象处理用户请求的成熟模式,责任链模式的关键是将用户的请求分派给许多对象,这些对象被组织成一个责任链,即每个对象含有后继对象的引用,并要求责任链上的每个对象,如果能处理用户的请求,就做出处理,不再将用户的请求传递给责任链上的下一个对象:如果不能处理用户的请求,就必须将用户的请求传递给责任链上的下一个对象

5 行为型模式之- 责任链模式

责任链模式介绍: 责任链模式是行为模式之一,什么是"链"?我们将多个节点首尾相连,就形成了链,对于链式结构,每个节点都可以拆开再重新连接,因此链式结构也具有很好的灵活性.将这样一种结构应用于编程领域,将每一个节点看作是一个对象,每一个对象拥有不同的处理逻辑,将一个请求从一个链的首端发出,沿着链的路径依次传递给每一个节点对象,直至有对象处理这个请求为止,我们将这样的一种模式称为责任链模式. 责任链模式的定义: 使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系,将这

行为型模式:责任链模式

文章首发:行为型模式:责任链模式 十一大行为型模式之四:责任链模式. 简介 姓名 :责任链模式 英文名 :Chain of Responsibility Pattern 价值观 :责任归我 个人介绍 :Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request.Chain the receiving objects and

设计模式-行为型模式,责任链模式(10)

顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计模式属于行为型模式. 在这种模式中,通常每个接收者都包含对另一个接收者的引用.如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推. class Event: def __init__(self, name): self.name = name def __str__(self): ret

设计模式(十八):责任链模式

一.定义 请求在这个链上传递,直到链上的某一个对象决定处理此请求. 发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任. 二.实例 其实和状态模式类似,只是状态模式在具体的子类中指定了下一个具体的处理对象.而责任链模式,可以在客户端动态的组织链的规则和责任. 首先,上下文类: public class Context { public string Suffix { get; set; } } 其次,抽象责任 public

命令模式、状态模式、责任链模式区别(转)

命令模式:一次设定,统一执行.状态模式:    相当于If else if else:    设计路线:各个State类的内部实现(相当于If,else If内的条件)    执行时通过State调用Context方法来执行.职责链模式:    相当于Swich case    设计路线:客户设定,每个子类(case)的参数是下一个子类(case).    使用时,向链的第一个子类的执行方法传递参数就可以. ———————————————————————————————————— 命令模式:将多

Chain of Responsibility责任链模式(C++责任链模式)

Chainof Responsibility责任链模式:相当于MFC,windows程序设计窗口中的消息机制这类. MFC中,消息是通过一个向上递交的方式进行处理,例如一个WM_COMMAND消息的处理流程可能为: 1) MDI主窗口(CMDIFrameWnd)收到命令消息WM_COMMAND,其ID位ID_×××: 2) MDI主窗口将消息传给当前活动的MDI子窗口(CMDIChildWnd): 3) MDI子窗口给自己的子窗口(View)一个处理机会,将消息交给View: 4) View检查

18行为型模式之责任链模式

概念  Chain of Responsibility(CoR)模式也叫职责链模式或者职责连锁模式,是行为模式之一,该模式构造一系列分别担当不同的职责的类的对象来共同完成一个任务,这些类的对象之间像链条一样紧密相连,所以被称作职责链模式. 例1:比如客户Client要完成一个任务,这个任务包括a,b,c,d四个部分.首先客户Client把任务交给A,A完成a部分之后,把任务交给B,B完成b部分,...,直到D完成d部分. 例2:比如政府部分的某项工作,县政府先完成自己能处理的部分,不能处理的部分

设计模式之责任链模式--- Pattern chain-of-responsibility

模式的定义 责任链模式定义如下: Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request.Chain the receiving objects and pass the request along the chain until an object handles it. 使多个对象都有机会处理请求,从而避免请求的发送