设计模式-----模板方法模式

模板方法模式:

定义:定义一个模板类抽象类,共同特性(非抽象方法)到当前类中实现,其他特性(抽象方法)到对应的子类中实现

模板方法 示例+注释

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/*
* 抽象基类,为所有子类提供一个算法框架
*/
// 提供final修饰的模板方法 封装了所有子类共同遵循的算法框架 该方法中主要有两类:
// 1.抽象基类(包括基本方法(共有特性)、抽象方法(相似或特有特性由子类实现)、默认钩子方法 可选(通过抽象子类重写控制流程等)
// 2.具体子类 实现部分抽象方法,方便适配不同的规则 可选再子类中覆写钩子方法 方便控制模板执行流程
public abstract class Template {
/*
* 模板方法
* 封装了所有子类共同的算法框架
*/
//final 修饰,不能被子类复写。该模板由当前类所有,防止子类改变原有的模板
//通用公用的方法 用private修饰(共有属性)
//业务相似的方法以抽象方法形式体现,具体实现由子类完成。
public final void templateMethod(){
//共同属性一
commonMethod1();
//共同属性二
commonMethod2();
//特有属性一
specifiedMethod1();
if(isRun()){
//特有属性二
specifiedMethod2();
}
}
/*
* Hook, 钩子函数,提供一个默认或空的实现
* 具体的子类可以自行决定是否挂钩以及如何挂钩
* 是否运行
*/
protected boolean isRun() {
return true;
}
//通用公用的方法 用private修饰(共有属性)
private void commonMethod1() {
System.out.println("共同属性一");
}
private void commonMethod2() {
System.out.println("共同属性二");
}
//特有属性一 修饰符视情况而定
protected abstract void specifiedMethod1();
//特有属性二
protected abstract void specifiedMethod2();
}

各子类实现:

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
27
28
29
30
31
32
33
34
class Specified1 extends Template {
protected void specifiedMethod1() {
System.out.println("Specified1 method 1");
}

protected void specifiedMethod2() {
System.out.println("Specified1 method 2");
}
}
class Specified2 extends Template {
protected void specifiedMethod1() {
System.out.println("Specified2 method1");
}
protected void specifiedMethod2() {
System.out.println("Specified2 method2");
}
//重写父类钩子方法 控制显示
@Override
protected boolean isRun() {
return false;
}
}
public class Test{

public static void main(String[] args) {
Template specified1 = new Specified1();
Template specified2 = new Specified2();
specified1.templateMethod();
System.out.println("........................");
specified2.templateMethod();
}


}

结果:

1
2
3
4
5
6
7
8
共同属性一
共同属性二
Specified1 method 1
Specified1 method 2
........................
共同属性一
共同属性二
Specified2 method1

设计模式-----模板方法模式
http://yoursite.com/post/b1fdeded.html/
Author
Chase Wang
Posted on
August 16, 2018
Licensed under