Template Method
Catégorie
Pattern comportemental
Problème
Définir le squelette d’un algorithme dans une classe de base, permettant aux sous-classes de surcharger des étapes spécifiques sans modifier la structure de l’algorithme. Utile lorsque plusieurs classes partagent la même structure algorithmique mais diffèrent dans des étapes spécifiques.
Solution
- Définir une classe abstraite de base avec une méthode template définissant la structure de l’algorithme
- La méthode template appelle des méthodes abstraites ou hook pour les étapes variables
- Les sous-classes implémentent les méthodes abstraites pour personnaliser des étapes spécifiques
Structure
- AbstractClass : Définit la méthode template et les méthodes abstraites/hook
- ConcreteClass : Implémente les méthodes abstraites
Avantages clés
- Réutilisation du code — La structure algorithmique commune est définie une seule fois dans la classe de base
- Extensibilité — Les sous-classes peuvent surcharger des étapes spécifiques sans modifier la structure globale
- Inversion de contrôle — La classe de base contrôle l’algorithme ; les sous-classes fournissent les détails
Compromis
- Inversion de contrôle — Les sous-classes doivent respecter la structure de la méthode template
- Complexité — Peut devenir difficile à comprendre lorsque la méthode template est complexe
Quand l’utiliser
- Vous souhaitez éviter la duplication de code dans des algorithmes similaires
- Vous souhaitez contrôler la structure globale de l’algorithme tout en permettant aux sous-classes de personnaliser des étapes
- Vous souhaitez extraire le comportement commun dans une seule classe
Exemples
- Java
- Spring Framework (
post(),form_valid()) - Ruby On Rails est le template method)
- Frameworks de pipeline ETL (étapes extract, transform, load comme hooks)