chainofresponsibilityunit2.pas

来自「DELPHI设计模式书籍」· PAS 代码 · 共 102 行

PAS
102
字号
unit ChainOfResponsibilityUnit2;

interface
type
  TRequestType = (RHelp, RPrint, RPreview);

  TRequest = class
  public
    constructor Create;
    function GetKind(): TRequestType; virtual;
  end;

  THelpRequest = class(TRequest)
  public
    constructor Create;

  end;

  TPrintRequest = class(TRequest)
  public
    constructor Create;

  end;


  THandler = class
  private
    f_successor: THandler;
  public
    constructor Create;
    procedure HandleRequest(theRequest: TRequest); virtual;
    procedure HandleHelp(theHelpRequest: THelpRequest); virtual;
    procedure HandlePrint(thePrintRequest: TPrintRequest); virtual;
  end;

  TExtendedHandler = class(THandler)
  public
    constructor Create;
    procedure HandleRequest(theRequest: TRequest); virtual;
  end;

implementation

constructor TRequest.Create;
begin
//.....
end;

function TRequest.GetKind(): TRequestType;
begin
//.....
end;

constructor THelpRequest.Create;
begin
//.....
end;

constructor TPrintRequest.Create;
begin
//.....
end;

constructor THandler.Create;
begin
//.....
end;

procedure THandler.HandleHelp(theHelpRequest: THelpRequest);
begin
//.....
end;

procedure THandler.HandlePrint(thePrintRequest: TPrintRequest);
begin
//.....
end;


procedure THandler.HandleRequest(theRequest: TRequest);
begin
  case theRequest.GetKind() of
    RHelp: Self.HandleHelp(THelpRequest(theRequest)); //RTTI
    RPrint: Self.Handleprint(TPrintRequest(theRequest)); //RTTI
    //.........
  else
    //......
  end;
end;

constructor TExtendedHandler.Create;
begin
//.....
end;

procedure TExtendedHandler.HandleRequest(theRequest: TRequest);
begin
  case theRequest.GetKind of
    RPreview: ; //矪瞶preview
    //.......
  else
    inherited; //⊿砍届玥パ

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?