Intento:
Definisce lo scheletro di una algoritmo in una operazione e delega alcuni passaggi alle sottoclassi. Il pattern Template Method lascia alle sottoclassi la possibilità di ridefinire certi passaggi di un algoritmo senza cambiarne la struttura.
Applicabilità:
Il pattern in questione è da sfruttare nei seguenti casi:
- per implementare le parti non variabili di un algoritmo una sola volta e lasciare alle sottoclassi la responsabilità di implementare i comportamenti che possono variare.
- Quando il comportamento delle sottoclassi può essere fattorizzato e localizzato all’interno di una unica classe senza ripetizioni di codice (esempio di refactoring del tipo “refactoring to generalize”)
- nel caso in cui si voglia controllare l’estensione delle sottoclassi. Si può creare un template che crea degli hook (letteralmente uncini o ganci) che possono essere utilizzati per permettere estensioni, solo dall’hook in poi.
Partecipanti:
- AbstractClass → definisce operazioni primitive che le sottoclassi definiscono per implementare gli step dell’algoritmo; definisce anche un metodo template per definire l’ossatura dell’algoritmo.
- ConcreteClass → implementa le operazioni primitive per fornire i passaggi dell’algoritmo secondo la specifica sottoclasse
Conseguenze:
L’utilizzo del pattern Template Method è una tecnica fondamentale per il riutilizzo del codice, in particolare per le librerie.
Il Pattern in questione chiama diversi tipi di operazioni, fra le quali:
- operazioni concrete a livello di ConcreteClass
- operazioni concrete a livello di AbstractClass
- operazioni primitive
- Factory Method
- operazioni hook le quali forniscono comportamenti di default che possono essere estesi dalle sottoclassi se necessario.
E’ molto importante per il pattern specificare quali operazioni possono essere sovra-scritte (hook) e quali devono essere sovra-scritte (operazioni astratte)










[...] Template Method [...]