Java中常用的設(shè)計模式之模板模式詳解
優(yōu)點(diǎn)
封裝不變部分,擴(kuò)展可變部分。
提取公共代碼,便于維護(hù)。
行為由父類控制,子類實現(xiàn)。
缺點(diǎn)
每一個不同的實現(xiàn)都需要一個子類來實現(xiàn),導(dǎo)致類的個數(shù)增加,使得系統(tǒng)更加龐大。
使用場景
1.有多個子類共有的方法,且邏輯相同。
2.重要的、復(fù)雜的方法,可以考慮作為模板方法。
一、實現(xiàn)方式
假設(shè)一個場景,我們在玩游戲的時候,都需要初始化加載游戲,然后開始游戲,最后結(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é)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
SpringBoot集成WebSocket的兩種方式(JDK內(nèi)置版和Spring封裝版)
這篇文章主要介紹了SpringBoot集成WebSocket的兩種方式,這兩種方式為JDK內(nèi)置版和Spring封裝版,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06Java?Chassis3的多種序列化方式支持技術(shù)解密
這篇文章主要為大家介紹了Java?Chassis?3多種序列化方式支持技術(shù)解密,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01Spring Boot 整合持久層之JdbcTemplate
持久層是 Java EE 中訪問數(shù)據(jù)庫的核心操作,Spring Boot 中對常見的持久層框架都提供了自動化配置,例如 JdbcTemplate 、 JPA 等,Mybatis 的自動化配置則是 Mybatis 官方提供的2022-08-08springcloud Zuul動態(tài)路由的實現(xiàn)
這篇文章主要介紹了springcloud Zuul動態(tài)路由的實現(xiàn),詳細(xì)的介紹了什么是Zuu及其動態(tài)路由的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-11-11如何利用java控制鼠標(biāo)操作一些重復(fù)的事情
這篇文章主要給大家介紹了關(guān)于如何利用java控制鼠標(biāo)操作一些重復(fù)的事情,主要利用的是Robot類,Robot可以模擬鼠標(biāo)和鍵盤的輸入,相當(dāng)于Java版的按鍵精靈,需要的朋友可以參考下2021-12-12