Delphi 設計模式:《HeadFirst設計模式》---行為模式之責任鏈模式

來源:互聯網
上載者:User

標籤: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設計模式》---行為模式之責任鏈模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.