Des lecteurs comme vous aident à soutenir MUO. Lorsque vous effectuez un achat en utilisant des liens sur notre site, nous pouvons gagner une commission d'affiliation.

Le modèle de conception de méthode de modèle vous permet de définir les étapes d'un algorithme au sein d'une seule méthode d'une classe. Cela vous permet de limiter les opérations spécifiques d'une application à une seule méthode.

Chaque étape de l'algorithme définie par la méthode de modèle est une méthode interne. Cependant, la méthode template ne gère que l'implémentation de certaines de ses méthodes internes. Les sous-classes implémentent généralement une ou plusieurs des méthodes internes de la méthode de modèle.

Une sous-classe peut implémenter une méthode abstraite, mais elle ne peut pas redéfinir l'algorithme implémenté par une méthode finale.

Fonctionnement de la méthode de modèle

Un modèle de méthode de modèle typique aura la structure suivante :

finalannulermodèleMéthode(){
abstractOperation1();
abstractOperation2();

opérationconcrete1();
opérationconcrete2();

accrocher();
}

instagram viewer

La première chose importante à noter est que templateMethod() est final, donc aucune sous-classe ne peut remplacer cette méthode. L'autre chose importante à noter est les trois types de méthodes utilisées par le modèle de méthode de modèle: concrète, abstraite et crochet.

La classe abstraite qui héberge la méthode template implémente toutes ses méthodes concrètes, tandis que les sous-classes concrètes implémentent ses méthodes abstraites. La méthode hook ne fait généralement rien par défaut, mais une sous-classe a la possibilité de remplacer ces méthodes si nécessaire.

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

Le modèle de méthode de modèle agit comme un cadre pour une application. Ainsi, vous verrez souvent ce modèle dans les cadres logiciels qui fournissent le plan directeur pour le développement d'applications.

Par exemple, vous pouvez connecter votre application à l'un des nombreux systèmes de base de données. Les étapes de connexion et d'utilisation d'une base de données suivent un modèle similaire :

publicabstraitclasseBase de données{
// méthode de modèle
finalannulermodèle de base de données(){
// méthodes abstraites
setDBDriver();
setCredentials();

// méthode concrète
connecter();

// méthodes abstraites
créerDB();
setData();
lireDonnées();

// méthodes d'accroche
si (userWantsToUpdate()) {
updateData();
}

si (userWantsToDelete()) {
Suprimmer les données();
}

// méthode concrète
fermer la connexion();
}

abstraitannulersetDBDriver();
abstraitannulersetCredentials();
abstraitannulercréerDB();
abstraitannulersetData();
abstraitannulerlireDonnées();
abstraitannulermettre à jour les données();
abstraitannulerSuprimmer les données();

annulerconnecter(){
System.out.println("Connexion à la base de données...");
}

annulerfermer la connexion(){
System.out.println("Destruction de la connexion à la base de données...");
}

booléenuserWantsToUpdateuserWantsToUpdate(){
retourFAUX;
}

booléenuserWantsToDeleteuserWantsToDelete(){
retourFAUX;
}
}

Cet exemple de classe Database utilise le modèle de méthode de modèle pour créer un modèle que vous pouvez utiliser avec n'importe quelle base de données. Pour utiliser une base de données, votre application devra s'y connecter, puis détruire la connexion après utilisation. Ces activités sont généralement les mêmes pour toutes les bases de données. Par conséquent, la classe abstraite Database peut implémenter la connecter() et fermer la connexion() méthodes.

Les autres méthodes de la méthode de modèle diffèrent en fonction du type de base de données. Par exemple, une base de données MySQL stocke les données dans des tables, tandis qu'une La base de données MongoDB stocke les données dans des collections. Si vous souhaitez utiliser un Base de données MySQL en Java, créez simplement une nouvelle classe MySQL qui étend la classe Database :

publicclasseMySQLs'étendBase de données{
@Passer outre
annulersetDBDriver(){
System.out.println("Sélection du pilote MySQL...");
}

@Passer outre
annulersetCredentials(){
System.out.println("Définition des informations d'identification de la base de données MySQL...");
}

@Passer outre
annulercréerDB(){
System.out.println("Création d'un nouveau tableau...");
}

@Passer outre
annulersetData(){
System.out.println("Insertion des données dans la base de données...");
}

@Passer outre
annulerlireDonnées(){
System.out.println("Récupération des données de la base de données...");
}

@Passer outre
annulermettre à jour les données(){
System.out.println("Mise à jour des données dans la base de données...");
}

@Passer outre
annulerSuprimmer les données(){
System.out.println("Suppression des données de la base de données...");
}
}

La classe MySQL implémente toutes les méthodes abstraites de la classe Database. Il peut également remplacer certaines méthodes concrètes. Cependant, il ne peut pas toucher base de donnéesModèle() méthode, qui utilise le mot-clé final.

publicclassePrincipal{
publicstatiqueannulerprincipal(Chaîne [] arguments){
Base de données mySQLDB = nouveau MySQL();
mySQLDB.databaseTemplate();
}
}

Cette classe Main crée un nouvel objet de base de données MySQL et utilise la méthode de modèle pour simuler la manière dont une application se connecterait à la base de données. L'exécution de la méthode main imprime le résultat suivant sur la console :

Dans la sortie, vous remarquerez que l'application n'appelle jamais le mise à jourDonnées() et Suprimmer les données() méthodes. C'est pourquoi les méthodes de hook sont importantes. Dans une base de données SQL, vous souhaiterez créer de nouvelles tables, insérer des données et afficher vos données. Cependant, vous ne voudrez peut-être pas mettre à jour ou supprimer des données. Par conséquent, les méthodes de crochet donnent aux sous-classes la possibilité de contrôler ces aspects critiques de l'algorithme.

@Passer outre
booléenuserWantsToUpdateuserWantsToUpdate(){
retourvrai;
}

En ajoutant simplement le code ci-dessus à la classe MySQL, l'application met désormais à jour les données dans la base de données. Si vous exécutez à nouveau la classe Main, elle affichera la sortie mise à jour suivante :

Comme vous pouvez le voir, l'application met maintenant à jour les données dans la base de données.

Les avantages de l'utilisation du modèle de conception de méthode de modèle

Un avantage majeur du modèle de méthode de modèle est qu'il favorise la réutilisation du logiciel. Ce modèle de conception prend également en charge une programmation efficace. Une sous-classe n'a besoin d'implémenter que des méthodes propres à son fonctionnement.

De plus, une application qui utilise le modèle de méthode de modèle est plus sécurisée, car les classes externes ne peuvent pas modifier sa structure de fonctionnement.