設計模式——Template模板模式

設計模式——Template模板模式

模板模式

在模板模式(Template Pattern)中,一個抽象類公開定義了執行它的方法的方式/模板。它的子類可以按需要重寫方法實現,但調用將以抽象類中定義的方式進行。即在父類中定義處理流程的框架,在子類中實現具體處理。工廠模式是將模板模式用於生成實例的一個典型例子。

有一些通用方法的時候可以用的該模式,即有多個子類共有的方法,且邏輯相同。重要的、複雜的方法,可以考慮作爲模板方法。

Game.java

該抽象類定義三個抽象方法,由子類去實現細節,定義模板方法爲public final以便控制模板流程的處理方法。

public abstract class Game {
   
abstract void initialize();
    abstract void
startPlay();
    abstract void
endPlay();

   
//模板
   
public final void play(){
       
//初始化遊戲
       
initialize();
       
//開始遊戲
       
startPlay();
       
//結束遊戲
       
endPlay();
   
}
}

兩個子類來實現抽象類,重寫三個方法。

public class ComputerGame extends Game {
   
@Override
   
void initialize() {
        System.
out.println("打開電腦遊戲,初始化");
   
}

   
@Override
   
void startPlay() {
        System.
out.println("開始玩電腦遊戲");
   
}

   
@Override
   
void endPlay() {
        System.
out.println("遊戲結束");
   
}

}

 

public class PhoneGame extends Game {
   
@Override
   
void initialize() {
        System.
out.println("打開手機遊戲,初始化");
   
}

   
@Override
   
void startPlay() {
        System.
out.println("開始玩手機遊戲");
   
}

   
@Override
   
void endPlay() {
        System.
out.println("遊戲結束");
   
}
}

測試:

public class Test {
   
public static void main(String[] args) {
        Game game =
new ComputerGame();
       
game.play();
       
System.out.println();
       
game = new PhoneGame();
       
game.play();
   
}
}

總結

模板方法總體來說比較簡單,優點是1、封裝不變部分,擴展可變部分。 2、提取公共代碼,便於維護。3、行爲由父類控制,子類實現。缺點是每一個不同的實現都需要一個子類來實現,導致類的個數增加,使得系統更加龐大。

爲防止惡意操作,一般模板方法都加上 final 關鍵詞。我們在理解類的層次時,通常是站在子類的角度去考慮的:子類可以使用父類中定義的方法;可以通過子類中增加方法以實現新的功能;子類中重寫父類的方法可以改變程序的行爲。而父類中的抽象方法同樣期待和要求資料區實現抽象方法。父類與子類的相互協作支撐起了整個程序。如果父類的方法過多,子類方法過少,子類變得輕鬆的同時降低了子類的靈活性;而如果父類方法過少,子類方法過多,則會使系統變得臃腫。這些都需要開發人員決定。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章