原文位址: http://www.work100.net/training/monolithic-architecture-design-patterns-template-pattern.html 更多教程: 光束雲 - 免費課程
模闆模式
請參照如上
章節導航
進行閱讀
1.概述
在模闆模式(
Template Pattern
)中,一個抽象類公開定義了執行它的方法的方式/模闆。它的子類可以按需要重寫方法實作,但調用将以抽象類中定義的方式進行。這種類型的設計模式屬于行為型模式。
意圖:
定義一個操作中的算法的骨架,而将一些步驟延遲到子類中。模闆方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
主要解決:
一些方法通用,卻在每一個子類都重新寫了這一方法。
何時使用:
有一些通用的方法。
如何解決:
将這些通用算法抽象出來。
關鍵代碼:
在抽象類實作,其他步驟在子類實作。
應用執行個體:
- 在造房子的時候,地基、走線、水管都一樣,隻有在建築的後期才有加壁櫥加栅欄等差異。
- 西遊記裡面菩薩定好的 81 難,這就是一個頂層的邏輯骨架。
- Spring 中對 Hibernate 的支援,将一些已經定好的方法封裝起來,比如開啟事務、擷取 Session、關閉 Session 等,程式員不重複寫那些已經規範好的代碼,直接丢一個實體就可以儲存。
優點:
- 封裝不變部分,擴充可變部分。
- 提取公共代碼,便于維護。
- 行為由父類控制,子類實作。
缺點:
每一個不同的實作都需要一個子類來實作,導緻類的個數增加,使得系統更加龐大。
使用場景:
- 有多個子類共有的方法,且邏輯相同。
- 重要的、複雜的方法,可以考慮作為模闆方法。
注意事項:
為防止惡意操作,一般模闆方法都加上
final
關鍵詞。
2.實作
我們将建立一個定義操作的
Game
抽象類,其中,模闆方法設定為
final
,這樣它就不會被重寫。
Cricket
和
Football
是擴充了
Game
的實體類,它們重寫了抽象類的方法。
TemplatePatternDemo
,我們的示範類使用
Game
來示範模闆模式的用法。
步驟 1
建立一個抽象類,它的模闆方法被設定為
final
。
Game.java
,代碼如下:
public abstract class Game {
abstract void initialize();
abstract void startPlay();
abstract void endPlay();
//模闆
public final void play(){
//初始化遊戲
initialize();
//開始遊戲
startPlay();
//結束遊戲
endPlay();
}
}
步驟 2
建立擴充了上述類的實體類。
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!
上一篇:
政策模式下一篇:
通路者模式如果對課程内容感興趣,可以掃碼關注我們的或
公衆号
,及時關注我們的課程更新
QQ群
