模板模式和策略模式非常的像
但是好处是不需要去实现多余的方法
举个例子 策略模式是举出方法让实现类全部实现
但是模板模式只需要实现需要的共同方法就好了
像游戏 开始游戏,选择人物,执行游戏,结束游戏
有的不需要选择人物直接开始 这种就可以使用模板模式
代码
abstract class Game {
abstract void startGame();
void choosePerson() {
}
abstract void playGame();
abstract void gameOver();
//模板方法
public final void play() {
startGame();
choosePerson();
playGame();
gameOver();
}
}
public class ContraGame extends Game{
@Override void startGame() {
System.out.println(“启动魂斗罗”);
}
@Override void playGame() {
System.out.println("1P跳河");
}
@Override void gameOver() {
System.out.println("1P失去生命值,游戏结束");
}
}
public class TMNTGame extends Game{
@Override void startGame() {
System.out.println(“合金弹头开始游戏”);
}
@Override void choosePerson() {
System.out.println("1P选择猪妹 2P选择刀妹");
}
@Override void playGame() {
System.out.println("1P中弹");
}
@Override void gameOver() {
System.out.println("生命值耗尽,游戏结束");
}
}
public class MainThed {
public static void main(String[] args) {
Game game=new ContraGame();
game.play();
game=new TMNTGame();
game.play();
}
}
输出:
启动魂斗罗
1P跳河
1P失去生命值,游戏结束
合金弹头开始游戏
1P选择猪妹 2P选择刀妹
1P中弹
生命值耗尽,游戏结束
模板模式优点:
扩展性好,对不变的代码进行封装,对可变的进行扩展;
可维护性好,因为将公共代码进行了提取,使用的时候直接调用即可;
模板模式缺点:
因为每一个不同的实现都需要一个子类来实现,导致类的个数增加,会使系统变得复杂;
使用场景:
有多个子类共有逻辑相同的方法;
重要的、复杂的方法,可以考虑作为模板方法。
注意事项:
为防止恶意操作,一般模板方法都加上 final 关键词!



