抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

模板方法(Template Method)

模式定义

定义一个操作的算法骨架,而将一些步骤延迟到子类中。Template Method 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤

样例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class TemplateMethodTest {
public static void main(String[] args) {
AbstractClass abstractClass = new SubClass();
abstractClass.operation();
}
}

abstract class AbstractClass{
public void operation() {
// 定义一个操作的算法骨架
System.out.println(" step 1");
System.out.println(" step 2");
System.out.println(" step 3");
//步骤延迟
templateMethod();
}

protected abstract void templateMethod();
}
class SubClass extends AbstractClass {
@Override
protected void templateMethod() {
System.out.println("subclass step");
}
}

应用场景

  1. 当你想让客户端只扩展算法的特定步骤,而不是整个算法或其结构 时,请使用Template Method模式。
  2. 当你有几个类包含几乎相同的算法,但有一些细微的差异时,请使用 此模式。

优点:

  1. 你可以让客户端只覆盖大型算法的某些部分,从而减少算法其他部分
    发生的更改对它们的影响。
  2. 你可以将重复的代码拖放到超类中。

实际应用

  • javax.servlet.http.HttpServlet
  • org.springframework.web.servlet.mvc.AbstractController

评论