Le modèle de méthode modèle en Java est un modèle de conception comportemental qui définit le cadre d'un algorithme et permet aux sous-classes de remplacer certaines étapes sans changer la structure de l'algorithme.
Le modèle est basé sur le principe ouvert/fermé. Autrement dit, il est ouvert à l'extension et fermé à la modification.Dans le modèle de méthode modèle, la classe parent définit le squelette d'un algorithme et la sous-classe peut personnaliser le comportement de certaines étapes en implémentant la méthode abstraite de la classe parent. l'étape entière de l'algorithme ne changera pas en raison des changements liés aux modifications des sous-classes
Le modèle de méthode de modèle comprend généralement une classe abstraite et plusieurs sous-classes concrètes. La classe abstraite définit le cadre de l'algorithme, y compris certaines méthodes de base et une méthode de modèle. La méthode est un modèle, qui contient Chaque étape a une méthode abstraite ou une méthode par défaut. Des sous-classes spécifiques peuvent implémenter leur propre comportement en implémentant ces méthodes abstraites
Il peut également y avoir des fonctions hook dans les classes abstraites, et les fonctions hook sont généralement celles par défaut. L'implémentation d'une fonction virtuelle dans une classe abstraite est vide, de sorte que les sous-classes peuvent choisir de remplacer la fonction pour implémenter des comportements spécifiques. Dans le modèle de méthode modèle, les fonctions de hook sont généralement utilisées pour effectuer des opérations spécifiques dans certaines étapes spécifiques de l'algorithme. conditions de vérification. Une autre utilisation des fonctions hook est de fournir un moyen d'étendre un algorithme. Les sous-classes peuvent ajouter des étapes supplémentaires ou modifier le comportement de l'algorithme en remplaçant la fonction hook. En bref, la fonction hook est un concept important dans la méthode modèle. Il peut être utilisé pour affecter le comportement de l'algorithme ou étendre les fonctionnalités de l'algorithme.
Définissez d'abord la classe abstraite du café
package com.fanqiechaodan.templatemethod; /** * @Classname CoffeeMaker * @Description 咖啡抽象类 */ public abstract class CoffeeMaker { public final void makeCoffee() { boilWater(); brewCoffee(); pourInCup(); if (isCondiments()) { addCondiments(); } } private void boilWater() { System.out.println("煮水"); } protected abstract void brewCoffee(); private void pourInCup() { System.out.println("倒入杯子中"); } /** * 钩子函数;是否加入调料,由子类决定是否重写 * * @return */ protected boolean isCondiments() { return true; } protected abstract void addCondiments(); }
Définissez ensuite deux sous-classes spécifiques
public class AmericanoMaker extends CoffeeMaker{ @Override protected void brewCoffee() { System.out.println("冲泡美式咖啡"); } @Override protected void addCondiments() { System.out.println("加入牛奶和糖"); } /** * 钩子函数;是否加入调料,由子类决定是否重写 * * @return */ @Override protected boolean isCondiments() { return false; } } public class LatteMaker extends CoffeeMaker{ @Override protected void brewCoffee() { System.out.println("冲泡浓缩咖啡"); } @Override protected void addCondiments() { System.out.println("添加奶泡和焦糖酱"); } }
Test
package com.fanqiechaodan.templatemethod; /** * @author fanqiechaodan * @Classname Demo * @Description 模板方法模式 * @Date 2023/3/9 18:57 */ public class Demo { public static void main(String[] args) { CoffeeMaker americanoMaker = new AmericanoMaker(); americanoMaker.makeCoffee(); System.out.println(); CoffeeMaker latteMaker = new LatteMaker(); latteMaker.makeCoffee(); } }
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!