定義
在模板模式(Template Pattern)中,一個抽象類公開定義了執(zhí)行它的方法的方式/模板。它的子類可以按需要重寫方法實現(xiàn)煞檩,但調(diào)用將以抽象類中定義的方式進(jìn)行稿存。這種類型的設(shè)計模式屬于行為型模式。
實現(xiàn)
我們將創(chuàng)建一個定義操作的 Game 抽象類著瓶,其中仔粥,模板方法設(shè)置為 final,這樣它就不會被重寫蟹但。Cricket 和 Football 是擴(kuò)展了 Game 的實體類麦向,它們重寫了抽象類的方法。
TemplatePatternDemo,我們的演示類使用 Game 來演示模板模式的用法裳朋。
image.png
步驟 1
創(chuàng)建一個抽象類,它的模板方法被設(shè)置為 final。
Game.java
public abstract class Game {
abstract void initialize();
abstract void startPlay();
abstract void endPlay();
//模板
public final void play(){
//初始化游戲
initialize();
//開始游戲
startPlay();
//結(jié)束游戲
endPlay();
}
}
步驟 2
創(chuàng)建擴(kuò)展了上述類的實體類司澎。
Cricket.java
public class Cricket extends Game {
@Override
void endPlay() {
System.out.println("Cricket Game Finished!");
}
@Override
void initialize() {
System.out.println("Cricket Game Initialized! Start playing.");
}
@Override
void startPlay() {
System.out.println("Cricket Game Started. Enjoy the game!");
}
}
Football.java
public class Football extends Game {
@Override
void endPlay() {
System.out.println("Football Game Finished!");
}
@Override
void initialize() {
System.out.println("Football Game Initialized! Start playing.");
}
@Override
void startPlay() {
System.out.println("Football Game Started. Enjoy the game!");
}
}
步驟 3
使用 Game 的模板方法 play() 來演示游戲的定義方式漱受。
TemplatePatternDemo.java
public class TemplatePatternDemo {
public static void main(String[] args) {
Game game = new Cricket();
game.play();
System.out.println();
game = new Football();
game.play();
}
}
步驟 4
驗證輸出虐先。
Cricket Game Initialized! Start playing.
Cricket Game Started. Enjoy the game!
Cricket Game Finished!
Football Game Initialized! Start playing.
Football Game Started. Enjoy the game!
Football Game Finished!