Template Method : guide complet pour développeurs juniors
Famille : Comportemental · Série : Design Patterns GoF · Article 10/24 · Popularité : #9 sur 23
Template Method fixe le squelette d'un algorithme ; les sous-classes surchargent des étapes.
En une phrase
Template Method fixe le squelette d'un algorithme ; les sous-classes surchargent des étapes.
Le problème sans ce pattern
Import CSV et JSON partagent extract/load mais pas transform.
Code qui sent le besoin de Template Method
Le client contient trop de détails ; extrais les rôles du schéma.
Symptômes dans ton code
- Fichiers qui grossissent à chaque nouvelle variante.
- Tests difficiles : trop de mocks ou d'effets de bord cachés.
- Tu as peur de toucher une classe car « tout dépend de tout ».
L'idée du pattern Template Method
Classe de base avec run() final qui appelle des hooks protégés.
| Rôle | Responsabilité |
|---|---|
| Client | Déclenche l'opération |
| Template Method | Structure centrale |
| Collaborateurs | Implémentations ou états |
Analogie du quotidien
Recette : étapes imposées, ingrédients variables.
Exemple complet en TypeScript
abstract class ReportPipeline {
run(source: string) {
const raw = this.fetch(source);
const cleaned = this.normalize(raw);
return this.render(cleaned);
}
protected fetch(s: string) { return s; }
protected abstract normalize(data: string): string;
protected render(data: string) { return data; }
}
class CsvReport extends ReportPipeline {
protected normalize(data: string) {
return data.trim().toUpperCase();
}
}
Ce qu'il faut retenir du code
- Le client dépend d'abstractions, pas de détails partout.
- Chaque nouvelle variante = nouvelle classe (ou module), pas un
ifde plus. - Nomme tes types pour le métier (noms métier explicites, pas
Strategy1).
Exemple en Python
# Template Method — reproduis les classes TypeScript avec dataclasses / ABC
Quand utiliser Template Method
- Plusieurs variantes ou étapes.
- Équipe qui doit nommer la solution en review.
Quand ne pas utiliser Template Method
- Script jetable.
- Un seul
ifstable.
Erreurs fréquentes des juniors
- Sur-ingénierie.
- Nom du pattern sans problème associé.
Patterns proches
- Voir série : Articles patterns proches
Dans le monde réel
Repère Template Method dans un framework que tu utilises (doc ou source).
Questions fréquentes (FAQ)
C'est obligatoire en entretien ? Non — on teste surtout ta capacité à reconnaître le problème. Le nom Template Method aide à communiquer en équipe.
Ça remplace les frameworks ? Non — React, Express ou Spring implémentent souvent ces idées pour toi. Comprendre Template Method te permet de les utiliser correctement.
Je dois tout refactoriser ? Non — applique le pattern quand la douleur est réelle (nouveaux bugs à chaque feature).
Mini test unitaire (idée)
// Exemple de test : mocke les collaborateurs, vérifie le comportement public
describe('Template Method', () => {
it('fonctionne avec une variante', () => {
// Arrange → Act → Assert
});
});
Adapte ce squelette à ton framework (Jest, Vitest, pytest).
Pas à pas : implémenter en 5 étapes
- Nomme le problème — est-ce vraiment Template Method ?
- Dessine les rôles sur papier (client, abstraction, implémentations).
- Écris un test qui décrit le comportement attendu.
- Implémente une variante — valide avant d'en ajouter d'autres.
- Documente en équipe — « ici on utilise Template Method parce que… ».
Checklist code review
- [ ] Le client ne dépend pas de classes concrètes inutiles
- [ ] Pas de sur-abstraction sur un cas unique
- [ ] Tests sur chaque variante / handler / état
- [ ] Nommage métier clair
Exercice pratique (25–35 min)
Cartographie un module de ton projet : pourrait-il devenir Template Method ?
Résumé
Template Method : Template Method fixe le squelette d'un algorithme ; les sous-classes surchargent des étapes.