Cet article présente principalement le modèle de méthode modèle du modèle de conception classique de Java, explique brièvement le principe et la définition du modèle de méthode modèle et analyse l'utilisation spécifique du modèle de méthode modèle Java sous forme d'exemples. reportez-vous à ce qui suit
Cet article décrit le modèle de méthode de modèle du modèle de conception Java avec des exemples. Partagez-le avec tout le monde pour référence, les détails sont les suivants :
Dans nos vies, beaucoup de choses incluent des étapes spécifiques. Si vous vous adressez à une banque pour gérer une affaire, la séquence habituelle des étapes est la suivante : prendre un numéro –> remplir le formulaire –> attendre que votre numéro soit appelé –> gérer l'affaire. Parmi ces étapes, certaines restent inchangées, comme la prise d'un numéro, qui doit être effectuée par tout le monde, mais d'autres doivent évoluer, comme le remplissage de formulaires, mais selon les entreprises, les documents à remplir sont différents. Un autre exemple est que lorsque nous sortons manger, les étapes générales sont : commander -> attendre -> manger -> payer, et le même schéma peut être trouvé. Il existe d’innombrables choses de ce genre.
Lors du développement du projet, vous pouvez également rencontrer une telle situation. Plusieurs modules fonctionnels peuvent avoir des étapes de fonctionnement similaires ou identiques, mais un lien ou une étape est différent. Nous pouvons extraire une ou plusieurs classes parentes communes (modèles). sous-classes pour implémenter des méthodes spécifiques. Prenons l'exemple d'aller à la banque pour gérer des affaires :
Classe abstraite simulée :
/** * 模板方法模式的模板框架(以去银行办理业务为例) * @description: */ public abstract class TempletBankFrame { /* 比如:去柜台办理银行卡业务* */ public final void handleBankCard() { /* 第一步:进入银行大厅取号* */ takeNumber(); /* 第二步:填写办理业务的相关单据* */ if(!isNeedThisMethod()){//特殊情况可以添加判断,如我之前有填写好单子,那今天就不必再填写了 writeBill(); } /* 第三步:等待工作人员叫号* */ waitCall(); /* 第四步:办理业务* */ handleCard(); } /* 取号步骤是不需要更改的,所以我们用private修饰* */ private void takeNumber() { System.out.println("办理银行业务请取号!"); } /* 办理的业务不同,填写的内容不同,所以我们用protected修饰,让子类去处理具体业务* */ protected abstract void writeBill(); /* 等待叫号步骤也是不需要更改的,所以我们用private修饰* */ private void waitCall() { System.out.println("办理银行业务请取号!"); } /* 办理的业务不同,用protected修饰,让子类去处理具体业务* */ protected abstract void handleCard(); /*定义一个钩子方法:由抽象类声明并实现,而子类会加以扩展。通常抽象类给出的实现是一个空实现,作为方法的默认实现。**/ protected abstract boolean isNeedThisMethod(); }
Cours de mise en œuvre concrète : Par exemple, gérer de l'argent retraits
/** * 办理取钱业务 * @description: */ public class GetMoney extends TempletBankFrame { @Override protected void writeBill() { System.out.println("我在填写取钱的单据!"); } @Override protected void handleCard() { System.out.println("我要取500万大洋"); } @Override protected boolean isNeedThisMethod() { System.out.println("我已经填写过单子,今天就直接等待叫号了吧!"); return true; } }
Classe spécifique de mise en œuvre : Par exemple, je vais demander une carte bancaire
/** * 办理银行卡 * @description: */ public class TackCard extends TempletBankFrame { @Override protected void writeBill() { System.out.println("我填写的是办理银行卡单据"); } @Override protected void handleCard() { System.out.println("我在办卡,即将完成!"); } @Override protected boolean isNeedThisMethod() { return false; } }
Classe de test
/** * 模板方法模式测试类 * @description: */ public class Test { public static void main(String[] args) { GetMoney money=new GetMoney(); money.handleBankCard();//调用模板中的办理业务方法 System.out.println("———–分隔线—————-"); TackCard card=new TackCard(); card.handleBankCard(); } }
Le résultat final :
办理银行业务请取号! 我已经填写过单子,今天就直接等待叫号了吧! 办理银行业务请取号! 我要取500万大洋 ———–分隔线—————- 办理银行业务请取号! 我填写的是办理银行卡单据 办理银行业务请取号! 我在办卡,即将完成!
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!