Template Method : définir des squelettes d’algorithmes
Définissez le squelette d’un algorithme dans une classe de base et laissez les sous-classes remplir les étapes.
Template Method : définir des squelettes d’algorithmes est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 4 leçons au total.
L’intention de la méthode modèle
La méthode modèle définit le squelette d’un algorithme dans une classe de base, en déléguant certaines étapes aux sous-classes. Celles-ci peuvent redéfinir des étapes sans modifier la structure générale.
La classe de base abstraite
La classe de base contient la méthode modèle (généralement final) qui orchestre les étapes. Les méthodes abstraites représentent les étapes variables. Les méthodes concrètes fournissent un comportement par défaut.
public abstract class DataProcessor {
// Template method — final, defines the algorithm
public final void process() {
readData();
processData();
writeResult();
}
protected abstract void readData();
protected abstract void processData();
protected void writeResult() {
System.out.println("Result written (default)");
}
}Sous-classes concrètes
Chaque sous-classe implémente les étapes abstraites. La séquence de la méthode modèle ne change jamais : seule l’implémentation des étapes individuelles varie.
public class CSVProcessor extends DataProcessor {
protected void readData() { System.out.println("Reading CSV..."); }
protected void processData() { System.out.println("Parsing CSV rows..."); }
}
public class XMLProcessor extends DataProcessor {
protected void readData() { System.out.println("Reading XML..."); }
protected void processData() { System.out.println("Parsing XML nodes..."); }
@Override
protected void writeResult() { System.out.println("Writing XML result."); }
}Méthodes d’extension
Un point d’extension est une étape facultative dotée d’une implémentation par défaut, souvent vide. Les sous-classes peuvent redéfinir ces points d’extension pour ajouter un comportement facultatif, sans être obligées de les implémenter.
public abstract class Game {
public final void play() {
initialize();
while (!isDone()) takeTurn();
printWinner();
}
protected void initialize() {} // hook — optional override
protected abstract boolean isDone();
protected abstract void takeTurn();
protected abstract void printWinner();
}Méthode modèle ou stratégie
La méthode modèle utilise l’héritage : le squelette est fixé dans la classe de base et les étapes sont redéfinies dans les sous-classes. La stratégie utilise la composition : l’algorithme complet est externe. La stratégie est plus flexible ; la méthode modèle est plus simple lorsque les étapes partagent beaucoup de contexte.
Java InputStream comme méthode modèle
java.io.InputStream implémente read(byte[], int, int) à partir de la méthode abstraite read(). Les sous-classes implémentent la version sur un octet ; la lecture sur plusieurs octets constitue le modèle.
Méthode modèle pour la génération de rapports
Définissez un modèle de rapport : recueillez les données, mettez-les en forme et produisez le résultat. Remplacez les sous-classes pour générer des sorties PDF, HTML ou CSV sans modifier la logique d’orchestration.
public abstract class ReportGenerator {
public final String generate() {
List<Record> data = fetchData();
String body = format(data);
return wrap(body);
}
protected abstract List<Record> fetchData();
protected abstract String format(List<Record> data);
protected String wrap(String body) { return body; } // hook
}Empêcher la redéfinition du modèle
Déclarez la méthode modèle final pour empêcher les sous-classes de modifier la structure de l’algorithme. Seules les méthodes d’extension et les méthodes abstraites doivent pouvoir être redéfinies.
public final void process() {
validate(); // abstract
execute(); // abstract
cleanup(); // hook with default
}Étapes abstraites ou concrètes
Rendez une étape abstraite lorsqu’elle doit être fournie par la sous-classe. Rendez-la concrète, éventuellement vide, lorsque les sous-classes peuvent la redéfinir pour la personnaliser.
Méthode modèle dans JUnit
Dans JUnit 4, setUp() et tearDown() sont des points d’extension de la méthode modèle définie par l’exécuteur de tests. L’exécuteur contrôle le moment où ils sont appelés.
Méthode modèle dans Spring
Le JdbcTemplate de Spring utilise la méthode modèle en interne. Le modèle contrôle la connexion, la création de l’instruction et le nettoyage ; vous fournissez une lambda RowMapper pour l’étape variable « mapper une ligne ».
List<User> users = jdbcTemplate.query(
"SELECT * FROM users",
(rs, row) -> new User(rs.getLong("id"), rs.getString("name"))
);Éviter l’héritage profond
La méthode modèle repose sur l’héritage, ce qui peut produire des hiérarchies de classes profondes. Limitez-les à un ou deux niveaux. Si les sous-classes commencent à redéfinir de nombreuses étapes de manière différente, envisagez de passer à la stratégie.
Vérification rapide
Quel mot-clé empêche les sous-classes de modifier la séquence de la méthode modèle ?
Récapitulatif
La méthode modèle verrouille le squelette de l’algorithme dans une classe de base avec final. Les sous-classes implémentent les étapes abstraites et peuvent redéfinir les points d’extension. Gardez des hiérarchies peu profondes ; utilisez la stratégie lorsque davantage de flexibilité est nécessaire.
Questions Fréquemment Posées
La leçon « Template Method : définir des squelettes d’algorithmes » est-elle gratuite ?
Oui — le texte complet de « Template Method : définir des squelettes d’algorithmes » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Template Method : définir des squelettes d’algorithmes » ?
Définissez le squelette d’un algorithme dans une classe de base et laissez les sous-classes remplir les étapes. Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Java Academy ?
Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Template Method : définir des squelettes d’algorithmes » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?
Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Modèle Observer : notification d’événements
- Modèle Strategy : algorithmes interchangeables
- Modèle Command : encapsuler des actions
- Template Method : définir des squelettes d’algorithmes