在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。
意图
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
实现
实现如下
一个游戏抽象类,不同的游戏加载方式不同
- 创建抽象类
public abstract class Game{
public void play(){
init();
loading();
gameing();
}
protected void init(){
System.out.println("游戏初始化...");
}
protected abstract void loading();
protected abstract void gameing();
}
- 实现抽象类
public class FPSGame extends Game{
@Override
protected void loading() {
System.out.println("FPS游戏加载中...");
}
@Override
protected void gameing() {
System.out.println("FPS游戏运行中...");
}
}
public class RPGGame extends Game{
@Override
protected void loading() {
System.out.println("RPG游戏加载中...");
}
@Override
protected void gameing() {
System.out.println("RPG游戏运行中...");
}
}
- 使用
public void main(String... args){
Game game;
game = new FPSGame();
game.play();
game = new RPGGame();
game.play();
}
- 结果
I/System.out: 游戏初始化...
I/System.out: FPS游戏加载中...
I/System.out: FPS游戏运行中...
I/System.out: 游戏初始化...
I/System.out: RPG游戏加载中...
I/System.out: RPG游戏运行中...