A delegate is a helper object used by another object. The delegator may send the delegate certain messages, and provide a default implementation when there is no delegate or the delegate does not respond to a message. This pattern is heavily used in Cocoa framework on Mac OS X. See also wp:Delegation pattern.

Objects responsibilities:

Delegator:

 Keep an optional delegate instance.
 Implement "operation" method, returning the delegate "thing" if the delegate respond to "thing", or the string "default implementation".
Delegate:

 Implement "thing" and return the string "delegate implementation"
Show how objects are created and used. First, without a delegate, then with a delegate that does not implement "thing", and last with a delegate that implements "thing".

unit Printer;
 
interface
 
type
  // the "delegate"
  TRealPrinter = class
  public
    procedure Print;
  end;
 
  // the "delegator"
  TPrinter = class
  private
    FPrinter: TRealPrinter;
  public
    constructor Create;
    destructor Destroy; override;
    procedure Print;
  end;
 
implementation
 
{ TRealPrinter }
 
procedure TRealPrinter.Print;
begin
   Writeln('Something...');
end;
 
{ TPrinter }
 
constructor TPrinter.Create;
begin
  inherited Create;
  FPrinter:= TRealPrinter.Create;
end;
 
destructor TPrinter.Destroy;
begin
  FPrinter.Free;
  inherited;
end;
 
procedure TPrinter.Print;
begin
  FPrinter.Print;
end;
 
end.