Java中常用的設計模式之模板模式詳解
優點
封裝不變部分,擴展可變部分。
提取公共代碼,便於維護。
行為由父類控制,子類實現。
缺點
每一個不同的實現都需要一個子類來實現,導致類的個數增加,使得系統更加龐大。
使用場景
1.有多個子類共有的方法,且邏輯相同。
2.重要的、復雜的方法,可以考慮作為模板方法。
一、實現方式
假設一個場景,我們在玩遊戲的時候,都需要初始化加載遊戲,然後開始遊戲,最後結束遊戲,這像是一套模板一樣的操作,但是具體的實現方法卻不同,例如:LOL 遊戲與 CF 遊戲的加載資源肯定不同,遊戲的內容也不同。
1、遊戲抽象類
package com.asurplus.common.template; /** * 遊戲抽象類 */ public abstract class Game { // 初始化遊戲 abstract void init(); // 開始遊戲 abstract void start(); // 結束遊戲 abstract void end(); // 模板 public final void play() { // 初始化遊戲 init(); // 開始遊戲 start(); // 結束遊戲 end(); } }
2、LOL遊戲類
package com.asurplus.common.template; import lombok.extern.slf4j.Slf4j; /** * LOL遊戲 */ @Slf4j public class LolGame extends Game { @Override void init() { log.info("初始化 LOL 遊戲"); } @Override void start() { log.info("LOL 遊戲開始"); } @Override void end() { log.info("LOL 遊戲結束"); } }
3、CF遊戲類
package com.asurplus.common.template; import lombok.extern.slf4j.Slf4j; /** * CF遊戲 */ @Slf4j public class CfGame extends Game { @Override void init() { log.info("初始化 CF 遊戲"); } @Override void start() { log.info("CF 遊戲開始"); } @Override void end() { log.info("CF 遊戲結束"); } }
二、測試
package com.asurplus.common.template; /** * 模板模式 */ public class TestMain { public static void main(String[] args) { // LOL 遊戲 Game lolGame = new LolGame(); lolGame.play(); System.out.println(); // CF 遊戲 Game cfGame = new CfGame(); cfGame.play(); } }
輸出結果
可以看出,一套模板,可以有多個實現方式,從而實現瞭我們的工廠模式。
總結
本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!
推薦閱讀:
- Java中常用的設計模式之觀察者模式詳解
- Java中常用的設計模式之裝飾器模式詳解
- Java中常用的設計模式之責任鏈模式詳解
- Java中常用的設計模式之策略模式詳解
- Java中常用的設計模式之單例模式詳解