標籤:io ar 使用 for on log 代碼 bs ad
模式解說 責任鏈模式是一種對象的行為模式,它將處理用戶端請求的那些對象聯成一條鏈,並沿著這條鏈傳遞請求,直到有一個對象處理它為止。通常使用在以下場合 1 有多個對象可以處理一個請求,哪個對象處理該請求事先並不知道,而是在運行時自動確定; 2 希望在不明確制定接收者的情況下,向多個對象中的一個提交請求; 3 處理一個請求的對象集合需要動態指定時;16.2 結構和用法 1.抽象處理者(THandler)-定義了一個處理請求的介面。如果需要,則聲明一個方法,實現對後續對象的連結; 2.具體處理者(TConcreteHandler)-負責處理求;連結後續對象,如果它能處理該請求,則處理,如果不能,則傳遞給其連結化物件處理; 3.用戶端(TClient)-發出請求給責任鏈中的具體處理對象;程式碼範例:unit Chain;interfacetype 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;implementationuses 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;interfaceuses 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;implementationuses 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設計模式》---行為模式之責任鏈模式