Java Template Pattern(模板模式)

在模板模式(Template Pattern)中,一個抽象類公開定義了執行它的方法的方式/模板。它的子類可以按需要重寫方法實現,但調用將以抽象類中定義的方式進行。這種類型的設計模式屬于行為型模式。

關鍵代碼:在抽象類實現,其他步驟在子類實現。

優點: 1、封裝不變部分,擴展可變部分。 2、提取公共代碼,便于維護。 3、行為由父類控制,子類實現。
缺點:每一個不同的實現都需要一個子類來實現,導致類的個數增加,使得系統更加龐大。

注意事項:為防止惡意操作,一般模板方法都加上 final 關鍵詞。

  1. 創建一個抽象類,它的模板方法被設置為 final。
/**
 * 1. 創建一個抽象類,它的模板方法被設置為 final。
 * @author mazaiting
 */
public abstract class Game {
    /**
     * 初始化
     */
    abstract void initialize();
    /**
     * 開始游戲
     */
    abstract void startPlay();
    /**
     * 結束游戲
     */
    abstract void endPlay();
    
    // 模板
    public final void play(){
        initialize();
        startPlay();
        endPlay();
    }
    
}
  1. 創建擴展了Game類的實體類。
/**
 * 2. 創建擴展了Game的實體類
 * @author mazaiting
 */
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!");
    }

}

/**
 * 2. 創建擴展了Game的實體類
 * 
 * @author mazaiting
 */
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!");
    }

}
  1. 使用 Game 的模板方法 play() 來演示游戲的定義方式。
/**
 * 3. 使用 Game 的模板方法 play() 來演示游戲的定義方式。
 * @author mazaiting
 */
public class Client {
    public static void main(String[] args) {
        Game game = new Cricket();
        game.play();
        
        System.out.println();
        
        game = new Football();
        game.play();        
    }
}
  1. 打印結果
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!
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容