Template Method est un modèle de conception comportementale. Le modèle de conception Template Method est utilisé pour créer un stub de méthode et différer certaines des étapes de mise en œuvre aux sous-classes.
Modèle de conception Template Method
Le modèle de méthode de modèle définit les étapes pour exécuter un algorithme et peut fournir une implémentation par défaut qui pourrait être commune à toutes ou à certaines des sous-classes. Prenons un exemple pour comprendre ce modèle, supposons que nous voulons fournir un algorithme pour construire une maison. Les étapes à effectuer pour construire une maison sont – construire une fondation, construire des piliers, construire des murs et des fenêtres. Le point important est que nous ne pouvons pas changer l’ordre d’exécution car nous ne pouvons pas construire des fenêtres avant de construire la fondation. Donc, dans ce cas, nous pouvons créer une méthode de modèle qui utilisera différentes méthodes pour construire la maison. Maintenant, construire la fondation pour une maison est la même pour tous les types de maisons, que ce soit une maison en bois ou une maison en verre. Nous pouvons donc fournir une implémentation de base pour cela, si les sous-classes veulent remplacer cette méthode, elles peuvent mais c’est surtout commun à tous les types de maisons. Pour nous assurer que les sous-classes ne remplacent pas la méthode de modèle, nous devrions la rendre finale.
Classe abstraite Template Method
Puisque nous voulons que certaines des méthodes soient mises en œuvre par les sous-classes, nous devons définir notre classe de base en tant que classe abstraite. HouseTemplate.java
package com.journaldev.design.template;
public abstract class HouseTemplate {
// méthode de modèle, finale afin que les sous-classes ne puissent pas la remplacer
public final void buildHouse(){
buildFoundation();
buildPillars();
buildWalls();
buildWindows();
System.out.println("House is built.");
}
// implémentation par défaut
private void buildWindows() {
System.out.println("Building Glass Windows");
}
// méthodes à mettre en œuvre par les sous-classes
public abstract void buildWalls();
public abstract void buildPillars();
private void buildFoundation() {
System.out.println("Building foundation with cement,iron rods and sand");
}
}
buildHouse()
est la méthode de modèle et définit l’ordre d’exécution pour effectuer plusieurs étapes.
Classes concrètes de la méthode de modèle
Nous pouvons avoir différents types de maisons, telles que la maison en bois et la maison en verre. WoodenHouse.java
package com.journaldev.design.template;
public class WoodenHouse extends HouseTemplate {
@Override
public void buildWalls() {
System.out.println("Building Wooden Walls");
}
@Override
public void buildPillars() {
System.out.println("Building Pillars with Wood coating");
}
}
Nous aurions pu remplacer d’autres méthodes également, mais pour simplifier, je ne le fais pas. GlassHouse.java
package com.journaldev.design.template;
public class GlassHouse extends HouseTemplate {
@Override
public void buildWalls() {
System.out.println("Building Glass Walls");
}
@Override
public void buildPillars() {
System.out.println("Building Pillars with glass coating");
}
}
Client du modèle de conception de la méthode
Testons notre exemple de modèle de méthode avec un programme de test. HousingClient.java
package com.journaldev.design.template;
public class HousingClient {
public static void main(String[] args) {
HouseTemplate houseType = new WoodenHouse();
// utilisation de la méthode de modèle
houseType.buildHouse();
System.out.println("************");
houseType = new GlassHouse();
houseType.buildHouse();
}
}
Building foundation with cement,iron rods and sand
Building Pillars with Wood coating
Building Wooden Walls
Building Glass Windows
House is built.
************
Building foundation with cement,iron rods and sand
Building Pillars with glass coating
Building Glass Walls
Building Glass Windows
House is built.
Remarquez que le client invoque la méthode modèle de la classe de base et dépend de l’implémentation des différentes étapes. Il utilise certaines méthodes de la classe de base et d’autres de la sous-classe. La sortie du programme ci-dessus est :
Diagramme de classe du modèle de méthode
- Toutes les méthodes non abstraites de java.io.InputStream, java.io.OutputStream, java.io.Reader et java.io.Writer.
- Toutes les méthodes non abstraites de java.util.AbstractList, java.util.AbstractSet et java.util.AbstractMap.
Points importants du modèle de méthode
- La méthode modèle doit comporter certaines étapes dont l’ordre est fixe, et pour certaines des méthodes, l’implémentation diffère de la classe de base à la sous-classe. La méthode modèle doit être finale.
- La plupart du temps, les sous-classes appellent des méthodes de la superclasse, mais dans le modèle de conception du patron de méthode, la méthode de modèle de la superclasse appelle des méthodes des sous-classes, cela est connu sous le nom de Principe de Hollywood – « Ne nous appelez pas, nous vous appellerons ».
- Les méthodes de la classe de base avec une implémentation par défaut sont appelées Crochets et elles sont destinées à être remplacées par les sous-classes. Si vous ne voulez pas que certaines méthodes soient remplacées, vous pouvez les rendre finales, par exemple dans notre cas, nous pouvons rendre la méthode buildFoundation() finale si nous ne voulons pas que les sous-classes la remplacent.
C’est tout pour le modèle de conception du patron de méthode en Java, j’espère que cela vous a plu.
Source:
https://www.digitalocean.com/community/tutorials/template-method-design-pattern-in-java