概念
定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變算法的結構即可重定義該算法的某些特定步驟。
在模板方法模式中,父類可以只定義抽象的方法,方法的具體實現可以在子類中進行。
代碼
抽象類
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();
}
}
特點
使用模板方法模式,將代碼中不變的部分放父類中,變化的部分以抽象的形式,具體的實現交給子類進行,從而達到減少代碼量的目的。