模版方法模式

抽象类定义一组方法的执行顺序,具体的功能由子类来实现。
它仅仅使用了Java的继承机制,但使用非常广泛。
一般多个子类有公有的方法,并且逻辑基本相同的时候使用。

定义

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

模版方法模式通用类图

实现

基本方法

一些基本的操作,由子类实现具体的逻辑,在模版方法中被调用。

模版方法

模版方法可以有一个或者多个,一般是一个具体的方法,包含了基本方法的调用逻辑。

抽象模版类中包含了一个模版方法goToSchool和三个基本方法toSchool, study, goHome.
这样,每个学生继承该抽象类实现自己逻辑即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public abstract class StudentBehavor{
protected abstract void toSchool();
protected abstract void study();
protected abstract void goHome();
public void goToSchool(){
//do something.
toSchool();
// do something.
study();
// do something.
goHome();
// do something.
}

}

应用

优点

  • 封装不变部分,扩展可变部分
    把认为不变的部分算法封装到父类实现,可变部分通过继承来扩展。

  • 提取公共部分代码,便于维护

  • 行为由父类控制,子类实现
    基本方法由子类实现,子类可以扩展增加相应的功能,符合开闭原则。

缺点

在复杂的项目中,增加代码的阅读难度。