标签:io ar 使用 for on log 代码 bs ad
模式解说 责任链模式是一种对象的行为模式,它将处理客户端请求的那些对象联成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。 通常使用在以下场合 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.
Delphi 设计模式:《HeadFirst设计模式》---行为模式之责任链模式
标签:io ar 使用 for on log 代码 bs ad
原文地址:http://www.cnblogs.com/0x2D-0x22/p/4083434.html