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".

{
	type Delegator
 
	F init(d:Delegator) d.delegate = null
 
	F default_impl(d:Delegator) 'default implementation'
 
	F operation(d:Delegator) default_impl(d)
 
	F operation(d:Delegator) {
		guard defined thing
		guard thing is Fun
		try {
			d.delegate.thing()
		}
		catch(e:ImplNotFound) {
			# Might be unrelated exception, so check and optionally rethrow
			e.callable !== thing throws e
			default_impl(d)
		}
	}
 
	F operation(d:Delegator) {
		guard d.delegate is Null
		default_impl(d)
	}
 
 
	a = Delegator()
	echo(a.operation())
 
	# There is no method thing(s:Str)
	a.delegate = "abc"
	echo(a.operation())
 
	# ... now there is method thing(s:Str)
	F thing(s:Str) 'delegate implementation'
	echo(a.operation())
 
}