Skip to content

模板方法模式

亦称: Template Method

1. 简介

模板方法模式是一种行为设计模式, 它在超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。就像西游记的99八十一难,基本每一关都是;师傅被掳走、打妖怪、妖怪被收走,具体什么妖怪你自己定义,怎么打你想办法,最后收走还是弄死看你本事,我只定义执行顺序和基本策略,具体的每一难由观音来安排。

2. 模拟场景

假如你正在开发一款分析公司文档的数据挖掘程序。用户需要向程序输入各种格式(PDF、DOC 或 CSV)的文档, 程序则会试图从这些文件中抽取有意义的数据, 并以统一的格式将其返回给用户。
该程序的首个版本仅支持 DOC 文件。在接下来的一个版本中, 程序能够支持 CSV 文件。一个月后, 你 “教会” 了程序从 PDF 文件中抽取数据。
Alt text 一段时间后, 你发现这三个类中包含许多相似代码。尽管这些类处理不同数据格式的代码完全不同, 但数据处理和分析的代码却几乎完全一样。如果能在保持算法结构完整的情况下去除重复代码, 这难道不是一件很棒的事情吗?

3. 解决方案

模板方法模式建议将算法分解为一系列步骤, 然后将这些步骤改写为方法, 最后在 “模板方法” 中依次调用这些方法。步骤可以是 抽象的, 也可以有一些默认的实现。为了能够使用算法, 客户端需要自行提供子类并实现所有的抽象步骤。如有必要还需重写一些步骤(但这一步中不包括模板方法自身)。 Alt text

4. Java中的类

  • Spring中的JdbcTemplate、RestTemplate