定义算法操作骨架,详细的操作延迟在子类中实现;而子类在不改变算法结构的情况下重新定义方法中的算法步骤;
这里的模版方法模式很容易理解;我们在开发中使用的各种前后端模版或者一些框架都是模版设计模式的体现;
特点:
- 封装不变部分,扩展可变部分
- 提取公共代码,便于维护
- 行为由父类定义,子类实现
示例:定义一个game类,模拟玩游戏,模版方法play定义游戏流程,被声明为final不可被重写,子类方法重写具体的游戏过程实现;
public class TemplatePattern {
public static void main(String[]args) {
FootBallGame mygame = new FootBallGame();
mygame.play();
}
}
abstract class Game{
abstract void initialize();
abstract void gameStart();
abstract void gameOver();
public final void play(){
//初始化游戏
initialize();
//开始游戏
gameStart();
//结束游戏
gameOver();
}
}
class FootBallGame extends Game{
void initialize(){
System.out.println("football game is initailized!!!");
}
void gameStart(){
System.out.println("football game is start!!!");
}
void gameOver(){
System.out.println("football game is over!!!");
}
}
运行结果:
"/Applications/IntelliJ IDEA.app/Contents/jbr/Contents/Home/bin/java" "-javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=62333:/Applications/IntelliJ IDEA.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath /Users/wesen/Desktop/Idea/designpatterntest/out/production/designpatterntest TemplatePattern
football game is initailized!!!
football game is start!!!
football game is over!!!
Process finished with exit code 0