Il "caso d'uso" per la delega è praticamente lo stesso dell'ereditarietà, ovvero l'estensione di un comportamento di classe in modo polimorfico.
Questo è come il wikipedia definisce delegazione:
in ingegneria del software, il modello di delega è un design pattern nella programmazione orientata agli oggetti cui un oggetto, invece di eseguire uno dei suoi compiti prefissati, delegati che compito a un oggetto helper associato. Esiste un'inversione della responsabilità in cui a un oggetto helper, noto come delegato, viene assegnata la responsabilità di eseguire un'attività per il delegante. Il modello di delega è uno dei modelli di astrazione fondamentali alla base di altri modelli software come la composizione (detta anche aggregazione), i mix e gli aspetti.
ci sono, ovviamente, molte differenze tra delega e l'eredità, ma il più grande è, IMO, che l'eredità è un (aka, in fase di compilazione) rapporto fisso tra due classi, mentre la delega può essere definito in fase di esecuzione -time (in lingue che supportano questo). D'altra parte, l'ereditarietà offre un migliore supporto per il polimorfismo.
La delega è un argomento enorme (come l'ereditarietà), e si può leggere molto a riguardo. Alla fine, decidere se utilizzare la delega o l'ereditarietà si riduce a decidere se si desidera una relazione "è-a" o "ha-a", quindi non è così facile elencare le linee guida per la scelta.
Per me, in fondo, la decisione di creare un delegato viene dalla constatazione che:
mio codice presenta una serie di comportamenti omogenei (omogenei qui significa che può essere riconosciuto come avendo una natura comune" ");
tali comportamenti possono essere "personalizzati" per casi particolari (come in, sostituiti da comportamenti alternativi).
Questa è la mia opinione personale e una descrizione del modo in cui riesco a identificare gli schemi di "delega". Probabilmente ha molto a che fare con il fatto che la mia disciplina di programmazione è fortemente influenzata dal principio del refactoring.
In realtà, IMO, la delega è un modo per definire i punti di "personalizzazione" per la classe. Ad esempio, se si dispone di una sorta di flusso di lavoro astratto, in cui ad ogni passaggio si agisce in base a determinate condizioni; e inoltre quelle azioni concrete potrebbero essere sostituite da altre di un altro tipo, quindi vedo la possibilità di riutilizzarle attraverso la delega.
Spero che questo aiuti.