Maison > Java > javaDidacticiel > le corps du texte

Modèles de conception Java : analyse d'exemple de modèle de méthode de modèle

WBOY
Libérer: 2023-04-23 16:07:07
avant
1001 Les gens l'ont consulté

Template Method Pattern

Template Method Pattern (Template Method) définit le squelette de l'algorithme dans une opération et retarde certaines étapes de l'algorithme vers les sous-classes afin que les sous-classes ne puissent pas redéfinir la structure de l'algorithme. l'algorithme. Template Method)定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。

模板方法模式包含以下主要角色:

  • 抽象类(Abstract Class):负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个基本方法构成。

    • 抽象方法(Abstract Method) :一个抽象方法由抽象类声明、由其具 体子类实现。

    • 具体方法(Concrete Method) :一个具体方法由一个抽象类或具体类声明并实现,其子类可以进行覆盖也可以直接继承。

    • 钩子方法(Hook Method) :在抽象类中已经实现,包括用于判断的逻辑方法和需要子类重写的空方法两种。一般钩子方法是用于判断的逻辑方法,这类方法名一般为isXxx,返回值类型为boolean类型。

    • 模板方法:定义了算法的骨架,按某种顺序调用其包含的基本方法。

    • 基本方法:是实现算法各个步骤的方法。基本方法又可以分为三种:

  • 具体子类(Concrete Class

  • Le modèle de méthode de modèle contient les rôles principaux suivants :

  • Classe abstraite (Classe abstraite) : responsable de donner le plan d'un algorithme et d'un squelette. Il se compose d’une méthode modèle et de plusieurs méthodes de base.
    • Méthode abstraite (Abstract Method) : Une méthode abstraite est déclarée par une classe abstraite et implémentée par sa sous-classe concrète.

    • Modèles de conception Java : analyse dexemple de modèle de méthode de modèleMéthode Concrete (Concrete Method) : Une méthode concrète est déclarée et implémentée par une classe abstraite ou une classe concrète, et ses sous-classes peuvent remplacer ou hériter directement.

    • Méthode Hook (Hook Method) : elle a été implémentée dans la classe abstraite, y compris des méthodes logiques de jugement et des méthodes vides qui doivent être réécrites par les sous-classes. La méthode hook générale est une méthode logique utilisée pour le jugement. Le nom de cette méthode est généralement isXxx et le type de valeur de retour est booléen.
    • Méthode Template : définit le squelette de l'algorithme et appelle ses méthodes de base dans un certain ordre.


    • Méthode de base : C'est la méthode pour implémenter chaque étape de l'algorithme. Les méthodes de base peuvent être divisées en trois types :



    • Sous-classe Concrete (Concrete Class) : implémente les méthodes abstraites et les méthodes hook définies dans la classe abstraite, qui sont des logiques de niveau supérieur. mesures.




      【Cas】
    • Les étapes pour faire sauter sont fixes et divisées en étapes telles que verser l'huile, chauffer l'huile, verser les légumes, verser les assaisonnements et faire sauter. Mais vous pouvez ajouter différents légumes et différentes sauces. Utilisez maintenant le mode méthode modèle pour le simuler avec le code

      public class TemplateTest {
          public static void main(String[] args) {
              //炒包菜
              BaoCai baoCai = new BaoCai();
              baoCai.cookProcess();
              System.out.println("-------------");
              //炒白菜
              BaiCai baiCai = new BaiCai();
              baiCai.cookProcess();
          }
      }
      abstract class AbstractClass{ //抽象类
          //模板方法定义
          public final void cookProcess() {
              this.pourOil();//倒油
              this.heatOil();//热油
              this.pourVegetable();//倒蔬菜
              this.pourSauce();//倒调味料
              this.fry();//翻炒
          }
          public abstract void pourVegetable();//倒蔬菜是不一样的(一个下包菜,一个是下白菜)
          public abstract void pourSauce();//倒调味料是不一样
          public void pourOil() {System.out.println("倒油");}
          public void heatOil() {System.out.println("热油");}
          public void fry(){System.out.println("炒啊炒");}
      }
      class BaoCai extends AbstractClass{
          public void pourVegetable() {System.out.println("加入包菜");}
          public void pourSauce() {System.out.println("加入辣椒酱");}
      }
      class BaiCai extends AbstractClass{
          public void pourVegetable() {System.out.println("加入白菜");}
          public void pourSauce() {System.out.println("加入盐和味精");}
      }
      Copier après la connexion

      [Exécuter le résultat]

      Versez l'huile

      Chaud l'huile

      Ajoutez le chou

      Ajoutez la sauce chili

      Sauter et faire sauter ------ ------Versez l'huile

      Chauffez l'huile

      Ajoutez le chou

      Ajoutez du sel et du MSG

      Sauté et sauté

      Processus terminé avec le code de sortie 0

      🎜Avantages et inconvénients du modèle de méthode modèle🎜🎜🎜Avantages :🎜 🎜🎜1. Améliorez la réutilisabilité du code, placez la même partie du code dans la classe parent abstraite et placez différents codes dans différentes sous-classes. 🎜🎜2. Le contrôle inverse est réalisé. Une classe parent appelle le fonctionnement de sa sous-classe, et différents comportements sont étendus grâce à l'implémentation spécifique de la sous-classe. Le contrôle inverse est réalisé et est conforme au « principe d'ouverture et de fermeture ». 🎜🎜🎜Inconvénients : 🎜🎜🎜1. Chaque implémentation différente doit définir une sous-classe, ce qui entraînera une augmentation du nombre de classes, un système plus grand et une conception plus abstraite. 🎜🎜2. Les méthodes abstraites de la classe parent sont implémentées par la sous-classe, et le résultat de l'exécution de la sous-classe affectera le résultat de la classe parent, ce qui conduit à une structure de contrôle inverse, ce qui augmente la difficulté de lecture du code. 🎜🎜Scénarios d'utilisation🎜🎜1. Les étapes globales de l'algorithme sont très fixes, mais lorsque des parties individuelles sont volatiles, vous pouvez utiliser le modèle de méthode modèle pour résumer les parties facilement variables pour une implémentation par des sous-classes. 🎜🎜2. Il est nécessaire d'utiliser la sous-classe pour décider si une certaine étape de l'algorithme de la classe parent est exécutée, afin de réaliser le contrôle inverse de la classe parent par la sous-classe. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal