Implémentation du modèle de méthode de modèle en Java

1. Vue d'ensemble

Dans ce rapide didacticiel, nous verrons comment tirer parti du modèle de méthode de modèle - l'un des modèles GoF les plus populaires.

Il facilite la mise en œuvre d'algorithmes complexes en encapsulant la logique dans une seule méthode.

2. Mise en œuvre

Pour démontrer le fonctionnement du modèle de méthode de modèle, créons un exemple simple qui représente la construction d'une station informatique.

Compte tenu de la définition du pattern, la structure de l'algorithme sera définie dans une classe de base qui définit la méthode template build () :

public abstract class ComputerBuilder { // ... public final Computer buildComputer() { addMotherboard(); setupMotherboard(); addProcessor(); return new Computer(computerParts); } public abstract void addMotherboard(); public abstract void setupMotherboard(); public abstract void addProcessor(); // ... }

La classe ComputerBuilder est chargée de décrire les étapes requises pour construire un ordinateur en déclarant des méthodes pour ajouter et configurer différents composants , tels qu'une carte mère et un processeur.

Ici, la méthode build () est la méthode template , qui définit les étapes de l'algorithme d'assemblage des composants informatiques et renvoie des instances Computer entièrement initialisées .

Notez que i t est déclaré comme final pour éviter qu'il ne soit remplacé.

3. En action

Avec la classe de base déjà définie, essayons de l'utiliser en créant deux sous-classes. L'un qui construit un ordinateur «standard» et l'autre qui construit un ordinateur «haut de gamme»:

public class StandardComputerBuilder extends ComputerBuilder { @Override public void addMotherboard() { computerParts.put("Motherboard", "Standard Motherboard"); } @Override public void setupMotherboard() { motherboardSetupStatus.add( "Screwing the standard motherboard to the case."); motherboardSetupStatus.add( "Pluging in the power supply connectors."); motherboardSetupStatus.forEach( step -> System.out.println(step)); } @Override public void addProcessor() { computerParts.put("Processor", "Standard Processor"); } }

Et voici la variante HighEndComputerBuilder :

public class HighEndComputerBuilder extends ComputerBuilder { @Override public void addMotherboard() { computerParts.put("Motherboard", "High-end Motherboard"); } @Override public void setupMotherboard() { motherboardSetupStatus.add( "Screwing the high-end motherboard to the case."); motherboardSetupStatus.add( "Pluging in the power supply connectors."); motherboardSetupStatus.forEach( step -> System.out.println(step)); } @Override public void addProcessor() { computerParts.put("Processor", "High-end Processor"); } }

Comme nous pouvons le voir, nous n'avons pas eu à nous soucier de l'ensemble du processus d'assemblage, mais uniquement pour fournir des implémentations pour des méthodes distinctes.

Maintenant, voyons-le en action:

new StandardComputerBuilder() .buildComputer(); .getComputerParts() .forEach((k, v) -> System.out.println("Part : " + k + " Value : " + v)); new HighEndComputerBuilder() .buildComputer(); .getComputerParts() .forEach((k, v) -> System.out.println("Part : " + k + " Value : " + v));

4. Méthodes de modèle dans les bibliothèques Java Core

Ce modèle est largement utilisé dans les bibliothèques Java Core, par exemple par java.util.AbstractList ou java.util.AbstractSet.

Par exemple, Abstract List fournit une implémentation squelettique de l' interface List .

Un exemple de méthode de modèle peut être la méthode addAll () , bien qu'elle ne soit pas explicitement définie comme finale:

public boolean addAll(int index, Collection c) { rangeCheckForAdd(index); boolean modified = false; for (E e : c) { add(index++, e); modified = true; } return modified; }

Les utilisateurs doivent uniquement implémenter la méthode add () :

public void add(int index, E element) { throw new UnsupportedOperationException(); }

Ici, il est de la responsabilité du programmeur de fournir une implémentation pour ajouter un élément à la liste à l'index donné (la partie variante de l'algorithme de listage).

5. Conclusion

Dans cet article, nous avons montré le modèle de méthode de modèle et comment l'implémenter en Java.

Le modèle de méthode de modèle favorise la réutilisation et le découplage du code, mais au détriment de l'utilisation de l'héritage.

Comme toujours, tous les exemples de code présentés dans cet article sont disponibles à l'adresse over sur GitHub.