概念
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤。
在模板方法模式中,父类可以只定义抽象的方法,方法的具体实现可以在子类中进行。
代码
抽象类
public abstract class TragicAdventure {
public void caught(){
System.out.println("唐僧被抓走了");
}
public abstract void defeated();
public abstract void askHelp();
public void resued(){
System.out.println("唐僧被救回来了");
}
public void adventureStory(){
this.caught();
this.defeated();
this.askHelp();
this.resued();
}
}
具体类1
public class QingNiuAdventure extends TragicAdventure {
@Override
public void defeated() {
System.out.println("孙悟空被青牛精击败了");
}
@Override
public void askHelp() {
System.out.println("孙悟空向太上老君求助");
}
}
具体类2
public class HonghaierAdventure extends TragicAdventure {
@Override
public void defeated() {
System.out.println("孙悟空被红孩儿击败了");
}
@Override
public void askHelp() {
System.out.println("孙悟空向观世音求助");
}
}
客户端
public class Client {
public static void main(String[] args) {
System.out.println("----第一个故事----");
TragicAdventure story1 = new QingNiuAdventure();
story1.adventureStory();
System.out.println("----第二个故事----");
TragicAdventure story2 = new HonghaierAdventure();
story2.adventureStory();
}
}
特点
使用模板方法模式,将代码中不变的部分放父类中,变化的部分以抽象的形式,具体的实现交给子类进行,从而达到减少代码量的目的。