以下是Java模板设计模式的详细解析:
一、核心定义
模板模式(Template Method Pattern)是一种行为型设计模式,通过定义算法骨架并允许子类重写特定步骤,实现代码复用与扩展。其核心在于控制流程标准化,同时保留关键环节的灵活性 。
二、模式结构
抽象模板类(Abstract Class)
- 包含三类方法:
- 模板方法:
final
修饰的算法骨架(如prepareBeverage()
),定义步骤执行顺序 。 - 抽象方法:子类必须实现的差异化步骤(如
brew()
) 。 - 钩子方法:可选扩展点(如
customerWantsCondiments()
),提供默认实现 。
- 模板方法:
- 包含三类方法:
具体子类(Concrete Class)
- 继承抽象类,实现抽象方法或覆盖钩子方法(如
Tea
类定制addCondiments())
。
- 继承抽象类,实现抽象方法或覆盖钩子方法(如
三、典型应用场景
- 业务流程标准化
- HTTP请求处理、文件解析等固定流程场景 。
- 框架扩展点设计
- Spring的
JdbcTemplate
、RestTemplate
等模板类 。
- Spring的
- 多版本实现共存
- 不同协议(HTTP/HTTPS)或数据格式(JSON/XML)的处理 。
四、代码示例
abstract class CoffeeTemplate {
// 模板方法(final防止重写)
public final void prepareCoffee() {
boilWater();
brew();
pourInCup();
addCondiments();
}
// 具体方法
private void boilWater() { System.out.println("煮沸水"); }
// 抽象方法
protected abstract void brew();
protected abstract void addCondiments();
}
class Coffee extends CoffeeTemplate {
@Override
protected void brew() { System.out.println("过滤咖啡粉"); }
@Override
protected void addCondiments() { System.out.println("加糖和牛奶"); }
}
五、优势与注意事项
优势
- 避免重复代码:公共逻辑提升至父类 。
- 符合开闭原则:新增子类无需修改父类逻辑 。
注意事项
- 模板方法需用
final
修饰,防止子类破坏流程 。 - 钩子方法命名建议以
is
或should
开头(如isUserVIP()
)。
- 模板方法需用
对比策略模式:模板模式控制流程结构,策略模式封装完整算法替换 。