目录
TemplateMethod 模板方法模式
目录
[TOC]
1. 概述
1.1. Head First设计模式定义
模板方法模式 Template Method Parrern)在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义方法中的某些步骤。
模板就是一个方法,更具体的说,这个方法将算法定义为一组步骤,其中的任何步骤都可以是抽象的,由子类负责实现。这可以确保算法的结构保持不变,同时由子类提供部分实现。
1.2. 自我理解
高频使用的设计模式,只要有共同的流程,只是实现不一样,就可以用该模式。
1.3. 模板方法的组成
抽象类(AbstractClass):包含模板方法,定义了算法的骨架。专注于算法本身。
具体类(ConcreteClass):实现抽象类中的抽象方法,完成算法的实现。
2. UML
3. Example
3.1. TemplateMethod设计模式的代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
/** * Created * Date: 2021/06/08 17:33 <br/> * Description: 模板方法模式 * * @author jomin@loserzhao.com * @see */ public class TemplateMethodPatternDemo { public static void main(String[] args) { TemplateMethodPatternDemo templateMethodPatternDemo = new TemplateMethodPatternDemo(); templateMethodPatternDemo.run(); } public void run(){ ConcreteClass abstractClass = new ConcreteClass(); abstractClass.templateMethod(); } /** * Author: jomin@loserzhao.com <br/> * Date: 11:18 2021-06-09 <br/> * Description: 抽象类(AbstractClass):包含模板方法,定义了算法的骨架。专注于算法本身。 */ abstract class AbstractClass{ public void templateMethod(){ primitiveOperation1(); primitiveOperation2(); if(hook()){ concreteOperation(); } } protected abstract void primitiveOperation1(); protected abstract void primitiveOperation2(); protected void concreteOperation(){ System.out.println("concreteOperation"); } protected boolean hook(){ return true; } } /** * Author: jomin@loserzhao.com <br/> * Date: 11:18 2021-06-09 <br/> * Description: 具体类(ConcreteClass):实现抽象类中的抽象方法,完成算法的实现。 */ class ConcreteClass extends AbstractClass{ @Override protected void primitiveOperation1() { System.out.println("primitiveOperation1"); } @Override protected void primitiveOperation2() { System.out.println("primitiveOperation2"); } /** * Author: jomin@loserzhao.com <br/> * Date: 11:17 2021-06-09 <br/> * Description: 该钩子可以控制是否使用 concreteOperation 方法 * @return */ @Override protected boolean hook(){ return false; } } } |
原创文章,转载请注明: 转载自LoserZhao – 诗和远方[ http://www.loserzhao.com/ ]
本文链接地址: http://www.loserzhao.com/java/designpattern/templatemethod-designpattern.html
文章的脚注信息由WordPress的wp-posturl插件自动生成
0 条评论。