设计模式(七)——模板模式

[TOC]

模板模式

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

子类重写或实现父类的方法。再由父类的模板方法调用这些公共的方法。所以被子类重写或者不必暴露的方法一般定义为私有的。

优点

  • 封装不变不封,扩展可变部分。
  • 提取公共部分代码,便于维护。
  • 行为由父类控制,子类实现。

使用场景

  • 多个子类有公共的方法,并且逻辑基本相同。
  • 重要、复杂的算法,可以把核心算法设计为模板方法,相关细节由子类实现。
  • 重构时候,经相同代码提取到父类,再通过钩子函数约束其行为。

代码

GitHub

定义抽象模板类

1
2
3
4
5
6
7
8
9
10
11
12
public abstract class AbstractTemplate {

protected abstract void method1();

protected abstract void method2();

public void method(){
this.method1();
this.method2();
}

}

定义子类实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class ConcreteTemplate1 extends AbstractTemplate {
@Override
protected void method1() {
System.out.println("模板1业务逻辑方法1");
}

@Override
protected void method2() {
System.out.println("模板1业务逻辑方法2");
}
}


public class ConcreteTemplate2 extends AbstractTemplate {
@Override
protected void method1() {
System.out.println("模板2业务逻辑方法1");
}

@Override
protected void method2() {
System.out.println("模板2业务逻辑方法2");
}
}

测试类

1
2
3
4
5
6
7
8
9
public static void main(String[] args){

AbstractTemplate template1 = new ConcreteTemplate1();
AbstractTemplate template2 = new ConcreteTemplate2();
template1.method();
System.out.println("-----------------");
template2.method();

}
1
2
3
4
5
模板1业务逻辑方法1
模板1业务逻辑方法2
-----------------
模板2业务逻辑方法1
模板2业务逻辑方法2
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
显示 Gitment 评论