目录
一.介绍
模板方法模式(Template Method Pattern)属于行为型模式。定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
二.意图
- 基本算法可以固定,其中部分细节可以变化
- 方便的复用逻辑
- 控制子类只允许在特定的钩子点进行扩展
三.UML类图
四.具体代码
业务代码
public abstract class AbstractClass {
//模板方法
public void templateMethod(){
System.out.println("统一的逻辑");
abstractMethod();
System.out.println("统一的逻辑");
}
//可变步骤
protected abstract void abstractMethod();
}
class ConcreteClass extends AbstractClass{
@Override
protected void abstractMethod() {
System.out.println("用户自定义的逻辑");
}
}
客户端
public class Client {
public static void main(String[] args) {
AbstractClass abstractClass = new ConcreteClass();
abstractClass.templateMethod();
}
}
五.在JDK中的典型应用
javax.servlet.http.HttpServlet
我们经常会定义一个servlet去继承HttpServlet来处理用户请求,HttpServlet的service方法是响应请求的入口,同时这个方法也是一个模板方法,而HttpServlet里面的doGet、doPost等方法就是算法骨架里面的可变步骤,开发者可以重写这些方法来定义自己的业务逻辑
六.在Spring中的应用
org.springframework.web.servlet.mvc.AbstractController
七.设计思想
模板方法模式的设计思想主要体现在以下两个方面
1.不变性与可变性
- 使用抽象固定不变的部分
- 使用具体子类封装可变的部分
2.多态
- 子类可以覆盖父类的逻辑
- 运行时进行动态绑定