From GNUstepWiki

A delegate object is an object which acts on behalf of another object by implementing messages which allow the delegate to interfere in the normal flow of events, unlike notifications which only allow the receiver to react to the event.

Delegates are typically used to avoid subclassing.

Extend with Delegates: