模版模式:在抽象类中定义一部分具体通用的方法的执行方式,在子类中重写方法实现,然后以抽象类中的定义方式执行。
通俗来讲:抽象类封装不可变的代码部分,子类扩展可变代码部分。抽象类提取公用代码,子类负责实现。
该模式的缺点:每一个实现都需要使用一个子类,导致类个数的不断增加。
代码案例:
public abstract class Game {
abstract void initialize();
abstract void startPlay();
abstract void endPlay();
public final void play() {
initialize();
startPlay();
endPlay();
}
}
抽象类中提取公用方法。
public class Cricket extends Game {
@Override
void initialize() {
System.out.println("Cricket Game Initailzed!");
}
@Override
void startPlay() {
System.out.println("Cricket Game Started.");
}
@Override
void endPlay() {
System.out.println("Cricket Game Finished.");
}
}
子类中实现方法。
public class Football extends Game {
@Override
void initialize() {
System.out.println("Football Game Initialized.");
}
@Override
void startPlay() {
System.out.println("Football Game Started!");
}
@Override
void endPlay() {
System.out.println("Football Game Finished!");
}
}
测试类进行测试:
public class TemplatePattern {
public static void main(String[] args) {
Game game=new Cricket();
game.play();
System.out.println();
game=new Football();
game.play();
}
}
最终的运行结果:
Cricket Game Initailzed!
Cricket Game Started.
Cricket Game started.
Football Game Initialized.
Football Game Started!
Football Game Finished!
看到上面的运行结果,每个子类具体实现了抽象类的方法,但是最终的整个流程或算法,仍然需要使用抽象类所定义的流程。
模版模式的使用场景:一些公共的重要的、复杂的方法,又是多个子类所共有的,可以考虑使用模版模式进行设计。