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