Mode modèle


Dans le Template Pattern, une classe abstraite définit publiquement une manière/un modèle pour exécuter ses méthodes. Ses sous-classes peuvent remplacer l'implémentation de la méthode si nécessaire, mais les appels seront effectués de la manière définie dans la classe abstraite. Ce type de modèle de conception est un modèle comportemental.

Introduction

Intention : Définir le squelette d'un algorithme au sein d'une opération, tout en reportant certaines étapes aux sous-classes. Les méthodes modèles permettent aux sous-classes de redéfinir des étapes spécifiques d'un algorithme sans modifier la structure de l'algorithme.

Solution principale : Certaines méthodes sont courantes, mais cette méthode est réécrite dans chaque sous-classe.

Quand utiliser : Il existe quelques méthodes générales.

Comment résoudre : Résumer ces algorithmes généraux.

Code clé : est implémenté dans la classe abstraite et d'autres étapes sont implémentées dans la sous-classe.

Exemples d'application : 1. Lors de la construction d'une maison, les fondations, le câblage et les conduites d'eau sont tous les mêmes. Ce n'est que dans les étapes ultérieures de la construction qu'il y a des différences telles que l'ajout de placards et. clôtures. 2. Les 81 difficultés fixées par le Bodhisattva dans Journey to the West constituent un cadre logique de haut niveau. 3. La prise en charge d'Hibernate dans Spirng encapsule certaines méthodes prédéterminées, telles que l'ouverture de transactions, l'obtention de sessions, la fermeture de sessions, etc. Les programmeurs n'ont pas besoin d'écrire à plusieurs reprises le code standardisé et peuvent le sauvegarder en lançant simplement une entité.

Avantages : 1. Encapsulez les parties constantes et développez les parties variables. 2. Extrayez le code public pour faciliter la maintenance. 3. Le comportement est contrôlé par la classe parent et implémenté par la sous-classe.

Inconvénients : Chaque implémentation différente nécessite une sous-classe à implémenter, ce qui entraîne une augmentation du nombre de classes et un agrandissement du système.

Scénarios d'utilisation : 1. Il existe des méthodes communes à plusieurs sous-classes, et la logique est la même. 2. Les méthodes importantes et complexes peuvent être considérées comme des méthodes modèles.

Remarque : Pour éviter les opérations malveillantes, le mot-clé final est généralement ajouté aux méthodes du modèle.

Implémentation

Nous allons créer une classe abstraite Game qui définit l'action, où la méthode du modèle est définie sur final afin qu'elle ne soit pas remplacée. Cricket et Football sont des classes d'entités qui étendent Game et remplacent les méthodes de la classe abstraite.

TemplatePatternDemo, notre classe de démonstration utilise Game pour démontrer l'utilisation du modèle de modèle.

template_pattern_uml_diagram.jpg

Étape 1

Créez une classe abstraite avec sa méthode de modèle définie sur final.

Game.java

public abstract class Game {
   abstract void initialize();
   abstract void startPlay();
   abstract void endPlay();

   //模板
   public final void play(){

      //初始化游戏
      initialize();

      //开始游戏
      startPlay();

      //结束游戏
      endPlay();
   }
}

Étape 2

Créez une classe d'entité qui étend la classe ci-dessus.

Cricket.java

public class Cricket extends Game {

   @Override
   void endPlay() {
      System.out.println("Cricket Game Finished!");
   }

   @Override
   void initialize() {
      System.out.println("Cricket Game Initialized! Start playing.");
   }

   @Override
   void startPlay() {
      System.out.println("Cricket Game Started. Enjoy the game!");
   }
}

Football.java

public class Football extends Game {

   @Override
   void endPlay() {
      System.out.println("Football Game Finished!");
   }

   @Override
   void initialize() {
      System.out.println("Football Game Initialized! Start playing.");
   }

   @Override
   void startPlay() {
      System.out.println("Football Game Started. Enjoy the game!");
   }
}

Étape 3

Utiliser La méthode modèle play() de Game montre comment le jeu est défini.

TemplatePatternDemo.java

public class TemplatePatternDemo {
   public static void main(String[] args) {

      Game game = new Cricket();
      game.play();
      System.out.println();
      game = new Football();
      game.play();		
   }
}

Étape 4

Vérifiez la sortie.

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!