Java中的模板方法模式

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

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

在本快速教程中,我们将学习在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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/341736.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是单模单纤/双纤光纤收发器?

光纤收发器,是一种将短距离的双绞线电信号和长距离的光信号进行互换的以太网传输媒体转换单元,按其所需主要分为单纤光纤收发器和双纤光纤收发器,接下来我们就来详细介绍下什么是单模单纤/双纤光纤收发器?单模单纤和单模双纤光纤收…

什么是以太网光纤收发器,其产品特点和技术参数都有哪些?

以太网光纤收发器是一款提供以太网数据信号到光纤数据信号的双向透明转换器,可以将以太网信号通过光纤线路传输突破传输距离100米的限制,使得以太网网络覆盖得到极大的延伸。光纤收发器的出现,确保能够顺畅的将电信号与光纤信号相互转换&…

什么是CAN总线中继器?

CAN网桥(Bridge)是一个智能的中继器。使用CAN网桥对设备进行互连,克服了CAN总线结点个数及通信距离的物理限制,能有效扩充CAN网络的结点总数,延长通信距离。今天,飞畅科技的小编为大家详细介绍下CAN总线中继…

java百里香_百里香Spring测试的意见

java百里香我最近在基于Spring的Web应用程序中转换为thymeleaf以进行视图模板化,而不是jsp。 百里香叶文档中关于为什么百里香叶在jsp上为什么能保持水分的所有争论,我肯定被卖掉了。 除了能够预览模板之外,对我来说,主要原因之一…

一文读懂工业设备的两种通讯方式:现场总线和工业以太网

随着传统制造企业正在加快智能制造转型的进程,工业互联网迅速在全世界范围内兴起。在工业互联网的技术构架中,通过各类通讯方式接入不同设备、系统和产品,来采集海量数据是其重要的一环。本文将重点介绍工业底层设备的两种通讯方式&#xff1…

Java中的中介器设计模式

在本教程中,我们将学习一种行为模式,该行为模式将促进彼此通信的多个对象之间的松散耦合。 Mediator设计模式背后的想法是拥有一个中心对象,该对象封装了一组对象之间的交互方式。 在调解器模式中,我们在称为调解器的单独类中提取…

什么是中国1号信令?

中国1号信令是在电话自动交换网中,我国所用的随路信令的总称,目前在国内长途网和市话中的局间中继线上使用。那么,什么是中国1号信令?中国1号信令的分类又有哪些呢?接下来我们就跟随飞畅科技的小编一起来详细了解下吧&…

如何选购工业级光模块

大家都知道光模块是影响整个网络性能的关键因素,特别是在工业以太网中,网络连接控制的多为大型工业设备,光模块的稳定性尤为重要,那么,我们该如何选购工业级光模块呢?接下来就由飞畅科技的小编来为大家详细…

ejb生命周期_无状态EJB:池化和生命周期

ejb生命周期无状态EJB池和生命周期的概述视图(注释)。 对新手有用。 。 。 。 。 EJB池:快速概述 EJB实例存储在称为EJB池的位置-这不过是内存中的缓存 。 无状态EJB通常按需实例化,即,当客户端调用Bean上的方法时。…

单E1光端机分类及技术指标详解

单E1光端机是一种将G.703的E1信号调制到光纤上传输的设备。采用大规模集成芯片,电路简单,功耗低,可靠性高,具有完整的告警状态指示和完善的网管功能。那么,单E1光端机分类及技术指标有哪些呢?接下来我们就跟…

将Java类作为子进程运行

我本周需要将Java类(而不是jar)作为子进程运行。 更准确地说,我想从测试内部产生一个新进程,而不是直接在测试内部运行(进程内)。 我不认为这是幻想或复杂的事情。 但是,这不是我以前不需要做的…

光猫的分类及应用范围有哪些?

光猫也称为单端口光端机,是针对特殊用户环境而设计的产品,它利用一对光纤进行单E1或单V.35或单10BaseT点到点式的光传输终端设备。该设备作为本地网的中继传输设备,适用于基站的光纤终端传输设备以及租用线路设备。而对于多口的光端机一般会直…

关于光模块用单模光纤和多模光纤小知识

通过对光纤的认知,我们了解到光纤是通过导光来传输信号、不导电、不怕雷击,所以也不需要用接地保护,我们按光在光纤中的传输模式分为:多模光纤和单模光纤。对于我们使用者来说,你把多模和单模名称由来记住就可以了。接…

硬盘序列号示例_序列化代理模式示例

硬盘序列号示例有些书极大地改变了你的生活。 其中一本书是Joshua Bloch撰写的“ Effective Java” 。 在下面您可能会发现一些小的实验,该实验的灵感来自于本书的第11章“串行化”。 假设我们有一个为继承而设计的类,它本身不是可序列化的 &#xff0c…

什么是光纤转换器?光纤转换器转换类别介绍

光纤转换器是RS-232/422/485串行数据通过光纤的远距离传输,可以完成串口到光纤的转换,并且可以延长串行通信信号的传输距离。那么,光纤转换器转换类别有哪些呢?接下来我们就跟随飞畅科技的小编一起来详细了解下吧! 光纤…

H2数据库的Spring Boot

在本快速教程中,我们将引导一个由内存H2数据库支持的简单Spring Boot应用程序。 我们将使用Spring Data JPA与我们的数据库进行交互。 项目设置: 首先,让我们使用Spring Initializr生成我们的项目模板: 单击“生成项目”链接后&…

集线器,交换机,路由器工作层次的区别

集线器(Hub)、交换机(Switch)与路由器(Router)号称是网络硬件三剑客,一直以来都是网络界的活跃分子,但让非常多初入网络之门的菜鸟恼火的是,它们三者不仅外观相似&#x…

什么是协议网桥?

网桥(Bridge)是早期的两端口二层网络设备,用来连接不同网段。网桥的两个端口分别有一条独立的交换信道,不是共享一条背板总线,可隔离冲突域。网桥比集线器(Hub)性能更好,集线器上各端…

网桥是怎么分类的?具体有哪些分类?

网桥也叫桥接器,是连接两个局域网的一种存储/转发设备,它能将一个大的LAN分割为多个网段,或将两个以上的LAN互联为一个逻辑LAN,使LAN上的所有用户都可访问服务器。那么,网桥具体是怎么分类的,有哪些类别呢&…

c++返回指针时候注意提防_编写干净的测试–提防魔术

c返回指针时候注意提防很难为干净的代码找到一个好的定义,因为我们每个人都有自己的单词clean的定义。 但是,有一个似乎是通用的定义: 简洁的代码易于阅读。 这可能会让您感到有些惊讶,但我认为该定义也适用于测试代码。 使测试尽…