Java中常用的設計模式之模板模式詳解
優(yōu)點
封裝不變部分,擴展可變部分。
提取公共代碼,便于維護。
行為由父類控制,子類實現(xiàn)。
缺點
每一個不同的實現(xiàn)都需要一個子類來實現(xiàn),導致類的個數(shù)增加,使得系統(tǒng)更加龐大。
使用場景
1.有多個子類共有的方法,且邏輯相同。
2.重要的、復雜的方法,可以考慮作為模板方法。
一、實現(xiàn)方式
假設一個場景,我們在玩游戲的時候,都需要初始化加載游戲,然后開始游戲,最后結(jié)束游戲,這像是一套模板一樣的操作,但是具體的實現(xiàn)方法卻不同,例如:LOL 游戲與 CF 游戲的加載資源肯定不同,游戲的內(nèi)容也不同。
1、游戲抽象類
package com.asurplus.common.template;
/**
* 游戲抽象類
*/
public abstract class Game {
// 初始化游戲
abstract void init();
// 開始游戲
abstract void start();
// 結(jié)束游戲
abstract void end();
// 模板
public final void play() {
// 初始化游戲
init();
// 開始游戲
start();
// 結(jié)束游戲
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 游戲結(jié)束");
}
}
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 游戲結(jié)束");
}
}
二、測試
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();
}
}
輸出結(jié)果

可以看出,一套模板,可以有多個實現(xiàn)方式,從而實現(xiàn)了我們的工廠模式。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內(nèi)容!
相關文章
Mybatis配置錯誤:java.lang.ExceptionInInitializerError
這篇文章主要介紹了Mybatis配置錯誤:java.lang.ExceptionInInitializerError的相關資料,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12
SpringMVC配置多個properties文件之通配符解析
這篇文章主要介紹了SpringMVC配置多個properties文件之通配符解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
Java C++ leetcode執(zhí)行一次字符串交換能否使兩個字符串相等
這篇文章主要為大家介紹了Java C++ leetcode1790執(zhí)行一次字符串交換能否使兩個字符串相等,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10
基于spring security實現(xiàn)登錄注銷功能過程解析
這篇文章主要介紹了基于spring security實現(xiàn)登錄注銷功能過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-01-01
SpringMVC獲取請求參數(shù)和域?qū)ο蠊蚕頂?shù)據(jù)的示例代碼
這篇文章主要給大家介紹了SpringMVC獲取請求參數(shù)和域?qū)ο蠊蚕頂?shù)據(jù)的示例代碼,文中通過代碼示例給大家介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下2023-12-12

