模板方法模式的定义:定义一个操作中的算法框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
模板方法的通用类图
我们所说的模板方法指的就是抽象类中的templete方法,该方法实现对doSomething方法的调用并且这个方法的具体实现是交由子类实现的。
模板方法的具体应用,比如我们开发的系统需要解析文件并导入数据库,文件类型有txt、csv、xls,我们就可以考虑模板方法模式。
/** * 文件解析的抽象类 * */ public abstract class AbstractFileParser { // 解析文件的模板方法 public final void fileParser(File file) { // 解析文件 parser(file); } // 具体解析文件的逻辑交由子类去实现 protected abstract void parser(File file); }
/** * Txt 文件解析 */ public class TxtFileParser extends AbstractFileParser { /** * Txt 文件解析 * @param file */ @Override protected void parser(File file) { System.out.println("解析txt文件"); } }
/** * Csv 文件解析 * */ public class CsvFileParser extends AbstractFileParser { /** * 解析CSV文件 * * @param file */ @Override protected void parser(File file) { System.out.println("开始解析CSV文件"); } }
/** * XLs文件解析 * */ public class XlsFileParser extends AbstractFileParser { /** * xls 文件解析 * * @param file */ @Override protected void parser(File file) { System.out.println("开始解析xls文件"); } }
具体的类已经完成,那么如何应用呢?我们可以根据用户上传的文件类型来调用不同的文件解析类
public class Client { public static void main(String[] args) throws IOException { File file=new File("aaa.txt"); if("txt".equalsIgnoreCase(file.getName().split("[.]")[1])){ AbstractFileParser parser=new TxtFileParser(); parser.fileParser(file); } if("csv".equalsIgnoreCase(file.getName().split("[.]")[1])){ AbstractFileParser parser=new CsvFileParser(); parser.fileParser(file); } if("xls".equalsIgnoreCase(file.getName().split("[.]")[1])){ AbstractFileParser parser=new XlsFileParser(); parser.fileParser(file); } } }
在《java与模式》一书中提到了另一个例子,一个存款计算利息的场景,假设系统需要支持两种存款账号即货币市场账号和定期存款账号,这两种账号的存款利息是不同的,但是我们应该可以重这个场景中抽象出一个方法,即利息的计算,只是利息计算分两种情况,那么就可以使用两个实现类来实现。
类图如下:
相关推荐
本文实例讲述了Android编程设计模式之模板方法模式。分享给大家供大家参考,具体如下: 一、介绍 在面向对象开发过程中,通常会遇到这样的一个问题,我们知道一个算法所需的关键步骤,并确定了这些步骤的执行顺序,...
Java设计模式之模板方法模式.rarJava设计模式之模板方法模式.rar
设计模式之模板方法模式Java实现和UML类设计图
Java设计模式之模板方法模式Java认证考试.pdf
将《Head First 设计模式》(中文版)按章节进行了分割,每章一个文件,方便大家下载。
本文实例讲述了Python设计模式之模板方法模式。分享给大家供大家参考,具体如下: 模板方法模式(Template Method Pattern):定义一个操作中的算法骨架,将一些步骤延迟至子类中.模板方法使得子类可以不改变一个算法的...
本文实例讲述了PHP设计模式之模板方法模式。分享给大家供大家参考,具体如下: 定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 模板...
本文实例讲述了JavaScript设计模式之模板方法模式原理与用法。分享给大家供大家参考,具体如下: 一、模板方法模式:一种只需使用继承就可以实现的非常简单的模式。 二、模板方法模式由两部分组成,第一部分是抽象...
run()方法,这是一个汇总方法,一个模型生产成功了,总要拿给客户检测,run()方法就是一种检验方法,让它跑起来,通过run()方法,把所有功能都测试到了。
本文实例讲述了PHP设计模式之模板方法模式定义与用法。分享给大家供大家参考,具体如下: 什么是模板方法模式 模板方法(Template Method)设计模式中使用了一个类方法templateMethod(), 该方法是抽象类中的一个具体...
主要为大家详细介绍了java设计模式之模板方法模式的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
设计模式的模板方法模式的例子,希望对大家有用~~~~~~~~
主要为大家详细介绍了C++设计模式之模板方法模式TemplateMethod,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
设计模式--模板方法模式java例子
主要介绍了Java经典设计模式之模板方法模式,简单说明了模板方法模式的原理、定义,并结合实例形式分析了java模板方法模式的具体使用方法,需要的朋友可以参考下