模板方法模式是一种行为模式,建议在超类中更一般地定义算法。 该算法是在称为模板方法的方法中定义的。 子类仅定义更具体的算法步骤的实现。

使用这种设计模式的好处是,算法后面的任何更改只会影响超类中的代码。 此外,它还可以提高代码的可重用性。

在本快速教程中,我们将学习在Java中实现模板方法模式。

模板方法模式:

假设我们必须写一篇文章。 通常涉及几个步骤:

  • 专题研究
  • 勾勒轮廓
  • 写介绍
  • 然后,准备论文的正文
  • 最后,总结一下

因此,让我们继续创建EssayTemplate类:

public abstract class EssayTemplate {private String topic;public EssayTemplate(String topic) {this.topic = topic;}public final void writeEssay() {doResearch();makeOutline();writeIntro();writeBody();writeConclusion(); } void doResearch() { System.out.println("Researching"); }void makeOutline() { System.out.println("Making an outline"); }void writeIntro() { System.out.println("Introducing topic"); }void writeConclusion() { System.out.println("Concluding topic");}abstract writeBody();
}

无论论文的类型是短还是长,大部分的常规步骤(包括研究,创建大纲,撰写引言和结论)都将保持不变。 因此,这些方法定义存在于超类本身中。

另外,请注意, 我们已将模板方法标记为最终方法,以避免被任何子类覆盖。

使用模板类:

论文的主要内容或正文取决于论文的性质。 因此,我们将writeBody()方法定义留给子类提供。

现在,让我们创建EssayTemplate的两个子类-ShortEssayLongEssay

public class ShortEssay extends EssayTemplate {public ShortEssay(String topic) {super(topic);}@Overridepublic void writeBody() {System.out.println("Adding 2 paras");}
}public class LongEssay extends EssayTemplate {public LongEssay(String topic) {super(topic);}@Overridepublic void writeBody() {System.out.println("Adding 6 paras");}
}

UML图:

我们可以通过UML图将模板模式的上述示例实现表示为:


ShortEssayLongEssay定义了writeBody()方法的实现。 但是,定义算法的方法以及其他常见方法的实现位于超类中。

使用模板模式的客户端代码:

让我们编写一些客户端代码来测试我们的实现:

//code in main method
EssayTemplate shortEssay = new ShortEssay("Programming - An Art");
shortEssay.writeEssay();

这样,我们将在控制台上获得以下输出:

Researching
Making an outline
Introducing topic
Adding 2 paras
Concluding topic

结论:

在本教程中,我们研究了模板方法模式。

java.io.InputStreamjava.io.OutputStream的所有非抽象方法都使用模板模式

翻译自: https://www.javacodegeeks.com/2019/09/template-method-pattern-java.html

Java中的模板方法模式相关推荐

  1. java模板方法模式_Java中的模板方法模式

    java模板方法模式 模板方法模式是一种行为模式,建议在超类中更一般地定义算法. 该算法是在称为模板方法的方法中定义的. 子类仅定义更具体的算法步骤的实现. 使用这种设计模式的好处是,算法后面的任何更 ...

  2. Java 设计模式之模板方法模式

    一.了解模板方法模式 1.1 什么是模板方法模式 模板方法模式 Template Method Parrern)在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变 ...

  3. Java设计模式之模板方法模式(UML类图分析+代码详解)

    大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...

  4. java 模板方法_设计模式(java实现)_模板方法模式(Template method)

    设计模式(java实现)_模板方法模式(Template method) 模板方法模式是编程中经常用到到的模式.它定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现.这样,新的子类可以在不改变一个 ...

  5. Java中的贷款模式(又名贷方承租人模式)

    这篇文章是关于在Java中实现贷款模式的. 用例 在保存资源的代码与访问资源的代码之间实现分离,从而使访问代码无需管理资源. 当我们编写用于读取/写入文件或查询SQL / NOSQL数据库的代码时,上 ...

  6. java中的监听器模式

    java中的监听器模式 监听器模式的角色 过程 EventObject EventListener 例子1 监听按钮的点击事件 事件源 event source: Button 事件对象 event ...

  7. 设计模式之行为模式中的模板方法模式(template method)

    设计模式之行为模式中的模板方法模式(template method) 声明 一.行为模式 二.模板方法模式 三.实例 概况描述 代码 运行结果 优点 类似的模式 优秀文章 声明 本人写此文章只是为了梳 ...

  8. Java中的设计者模式

    创建型模式 1.单例模式 概念:单例模式,是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中,应用该模式的类只有一个实例.即一个类只有一个对象实例. 实 ...

  9. java中23中设计模式详解

    设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

最新文章

  1. VS Code为什么能这么牛?
  2. pthread_cond_broadcast相关
  3. 在Access和 SQL Server中通配符的应用方法
  4. 【IT笔试面试题整理】反转链表
  5. 我心目中的牛程序员、我们可以对比看看(人家还是看多年朋友面子上才肯帮忙1周,至少需支付1万元辛苦费)...
  6. android 刷新标题栏,Android 自定义标题栏的实例详解
  7. VirtualBox的vdi文件复制
  8. java 多线程基础(一)
  9. JAVA浅层复制深层复制理解-java_01_20160824
  10. tcp报文格式_腾讯面试中的TCP/IP协议简述+经典面试题
  11. 可以在python3下面用的pyh
  12. FR模板参数在SQL中或单元格过滤的写法
  13. 科工网大数据有力促进机器人制造业发展
  14. 数字化商业模式三结构:价值创造、价值交付、价值捕获
  15. 2022.7.20 JETSON NANO 2GB 跑Swin-Transformer-Object-Detection。(配置:UBUNTU18/PYTHON3.6/PYTORCH1.6.0...)
  16. C程序设计第五版谭浩强课后答案 第八章习题答案
  17. 用python画一个正方形
  18. matlab2016环境变量,matlab环境变量path
  19. Mac 系统下java端口占用
  20. 试验数据的筛选和质量可视化

热门文章

  1. P2055-假期的宿舍【网络流,最大流,最大匹配】
  2. 2017西安交大ACM小学期 文本查找[AC自动机]
  3. 动态规划训练25 [Food Delivery ZOJ - 3469 ]好题
  4. Dubbo(十)之配置加载流程
  5. Spring Bean 定义继承
  6. git创建tag标签
  7. C#实现人脸识别【Users】
  8. struts+hibernate+oracle+easyui实现lazyout组件的简单案例——OpSessionview实现
  9. ./NISwGSP: error while loading shared libraries: libopencv_stitching.so.3.0: cannot open shared obje
  10. html session 登录页面跳转页面跳转页面,session失效后跳转到登陆页面