Patron Modèle
Dans le patron de méthode, une classe abstraite définit publiquement la manière/le modèle d'exécution de ses méthodes. Ses sous-classes peuvent remplacer les implémentations de méthodes selon les besoins, mais l'invocation sera effectuée de la manière définie dans la classe abstraite. Ce type de patron de conception est un patron comportemental.
Introduction
intention
Le squelette d'un algorithme est défini dans la classe parente, et les sous-classes sont autorisées à redéfinir certaines étapes spécifiques de l'algorithme sans modifier la structure de l'algorithme.
Principaux problèmes résolus
- Il résout le problème de l'implémentation répétée des mêmes méthodes dans plusieurs sous-classes en abstrayant les méthodes communes dans la classe parente afin d'éviter la duplication de code.
Cas d'utilisation
- Lorsqu'il existe des méthodes communes qui peuvent être partagées entre plusieurs sous-classes.
Approche d'implémentation
- Définir une classe parente abstraite: Contient la méthode modèle et certaines méthodes abstraites ou concrètes.
- Sous-classe concrète: Hérite de la classe parente abstraite et implémente les méthodes abstraites, sans modifier la structure de l'algorithme.
Code clé
- Méthode modèle: définie dans la classe parente abstraite, appelle des méthodes abstraites et des méthodes concrètes.
- Méthode abstraite: implémentée par les sous-classes, représentant les parties variables de l’algorithme.
- Méthode concrète: implémentée dans la classe parente abstraite, représentant les parties invariantes de l’algorithme.
Exemple d'application
- Processus de construction: des étapes telles que les fondations, le câblage et la plomberie sont identiques, tandis que les étapes de construction ultérieures telles que l’ajout de placards et de clôtures sont différentes.
- Les 81 tribulations du Voyage en Occident: les 81 tribulations fixées par le Bodhisattva représentent un squelette logique de haut niveau.
- Le support de Spring pour Hibernate: encapsule des méthodes courantes telles que l’ouverture d’une transaction, l’obtention d’une Session et la fermeture d’une Session.
Avantages
- Encapsuler les parties invariantes: la partie invariante de l’algorithme est encapsulée dans la classe parente.
- Étendre les parties variables: les sous-classes peuvent étendre ou modifier les parties variables de l’algorithme.
- Extraire le code commun: réduit la duplication de code et facilite la maintenance.
Inconvénients
- Augmentation du nombre de classes: chaque implémentation différente nécessite une sous-classe, ce qui peut rendre le système volumineux.
Suggestions d'utilisation
- Lorsque plusieurs sous-classes ont des méthodes communes avec une logique identique, envisagez d’utiliser le patron Méthode modèle.
- Pour les méthodes importantes ou complexes, vous pouvez envisager de les définir comme méthodes modèles dans la classe parente.
Notes
- Pour empêcher toute modification malveillante, la méthode modèle est généralement déclarée final.
finalModificateur de mot-clé pour éviter d'être redéfinie par les sous-classes.
Les principaux rôles impliqués
-
Classe parente abstraite (Abstract Class):
- Définit la méthode modèle et certaines méthodes abstraites ou concrètes.
-
Classes concrètes:
- Hérite de la classe parente abstraite et implémente les méthodes abstraites.
-
Méthode crochet (facultative):
- Définie dans la classe parente abstraite, peut être redéfinie par les sous-classes pour influencer le comportement de la méthode modèle.
-
Client (facultatif):
- Utiliser des classes parentes abstraites et des sous-classes concrètes sans avoir à se soucier des détails de la méthode modèle.
Implémentation
Nous allons créer une classe qui définit des opérationsGameClasse abstraite, où la méthode modèle est déclarée final, afin qu'elle ne soit pas redéfinie.CricketetFootballÉtendGameLes classes concrètes, qui redéfinissent les méthodes de la classe abstraite.
TemplatePatternDemo, et notre classe de démonstration utiliseGamepour démontrer l'utilisation du patron de conception Template.
Étape 1
Créez une classe abstraite dont la méthode modèle est définie comme final.
Game.java
Étape 2
Créez des classes d'entité qui étendent la classe ci-dessus.
Cricket.java
Football.java
Étape 3
UtilisationGameUtilisez la méthode modèle play() pour démontrer comment le jeu est défini.
TemplatePatternDemo.java
Étape 4
Exécutez le programme et affichez les résultats :
Cricket Game Initialized! Start playing. Cricket Game Started. Enjoy the game! Cricket Game Finished! Football Game Initialized! Start playing. Football Game Started. Enjoy the game! Football Game Finished!autres extensions