原文地址:http://www.work100.net/training/monolithic-architecture-design-patterns-template-pattern.html
更多教程:光束雲 - 免費課程html
序號 | 文內章節 | 視頻 |
---|---|---|
1 | 概述 | - |
2 | 實現 | - |
請參照如上章節導航
進行閱讀java
在模板模式(Template Pattern
)中,一個抽象類公開定義了執行它的方法的方式/模板。它的子類能夠按須要重寫方法實現,但調用將以抽象類中定義的方式進行。這種類型的設計模式屬於行爲型模式。程序員
意圖:算法
定義一個操做中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類能夠不改變一個算法的結構便可重定義該算法的某些特定步驟。設計模式
主要解決:架構
一些方法通用,卻在每個子類都從新寫了這一方法。ide
什麼時候使用:.net
有一些通用的方法。設計
如何解決:code
將這些通用算法抽象出來。
關鍵代碼:
在抽象類實現,其餘步驟在子類實現。
應用實例:
優勢:
缺點:
每個不一樣的實現都須要一個子類來實現,致使類的個數增長,使得系統更加龐大。
使用場景:
注意事項:
爲防止惡意操做,通常模板方法都加上 final
關鍵詞。
咱們將建立一個定義操做的 Game
抽象類,其中,模板方法設置爲 final
,這樣它就不會被重寫。
Cricket
和 Football
是擴展了 Game
的實體類,它們重寫了抽象類的方法。
TemplatePatternDemo
,咱們的演示類使用 Game
來演示模板模式的用法。
建立一個抽象類,它的模板方法被設置爲 final
。
Game.java
,代碼以下:
public abstract class Game { abstract void initialize(); abstract void startPlay(); abstract void endPlay(); //模板 public final void play(){ //初始化遊戲 initialize(); //開始遊戲 startPlay(); //結束遊戲 endPlay(); } }
建立擴展了上述類的實體類。
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!"); } }
使用 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(); } }
執行程序,輸出結果:
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羣
,及時關注咱們的課程更新