# 简介
一个抽象类公开定义了执行它的方法的方式 / 模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。
关键代码框架在抽象类中实现,其他步骤在子类实现。模板方法需要加上 final
防止被重写。要注意的是,子类要重写的不是模板方法,而是子类需要重写的方法。抽象类可以通过模板方法来规定一整套行为流程,但是流程中各个行为可以由子类自己实现。
public abstract class Game { | |
abstract void initialize(); | |
abstract void startPlay(); | |
abstract void endPlay(); | |
// 模板 | |
public final void play(){ | |
// 初始化游戏 | |
initialize(); | |
// 开始游戏 | |
startPlay(); | |
// 结束游戏 | |
endPlay(); | |
} | |
} | |
//initialize,startPlay,endPlay 方法可以由子类重写 |
# 意图
模板方法可以定义算法框架,将一些步骤的实现延迟到子类,通过模板方法,子类可以重新定义算法的某些步骤,而不用改变算法的结构。
# 举例
泡茶和泡咖啡都有类似的流程(烧水,倒入杯中),但是某些步骤会有点不一样(加调料,brew-- 酝酿?),要求复用那些相同步骤的代码。
# 参考
菜鸟教程:https://www.runoob.com/design-pattern/template-pattern.html
Java 全栈知识体系:https://pdai.tech/md/dev-spec/pattern/17_template.html