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

可以看出,一套模板,可以有多個(gè)實(shí)現(xiàn)方式,從而實(shí)現(xiàn)了我們的工廠模式。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
SpringBoot集成WebSocket的兩種方式(JDK內(nèi)置版和Spring封裝版)
這篇文章主要介紹了SpringBoot集成WebSocket的兩種方式,這兩種方式為JDK內(nèi)置版和Spring封裝版,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06
Java?Chassis3的多種序列化方式支持技術(shù)解密
這篇文章主要為大家介紹了Java?Chassis?3多種序列化方式支持技術(shù)解密,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
Spring Boot 整合持久層之JdbcTemplate
持久層是 Java EE 中訪問(wèn)數(shù)據(jù)庫(kù)的核心操作,Spring Boot 中對(duì)常見(jiàn)的持久層框架都提供了自動(dòng)化配置,例如 JdbcTemplate 、 JPA 等,Mybatis 的自動(dòng)化配置則是 Mybatis 官方提供的2022-08-08
springcloud Zuul動(dòng)態(tài)路由的實(shí)現(xiàn)
這篇文章主要介紹了springcloud Zuul動(dòng)態(tài)路由的實(shí)現(xiàn),詳細(xì)的介紹了什么是Zuu及其動(dòng)態(tài)路由的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
如何利用java控制鼠標(biāo)操作一些重復(fù)的事情
這篇文章主要給大家介紹了關(guān)于如何利用java控制鼠標(biāo)操作一些重復(fù)的事情,主要利用的是Robot類(lèi),Robot可以模擬鼠標(biāo)和鍵盤(pán)的輸入,相當(dāng)于Java版的按鍵精靈,需要的朋友可以參考下2021-12-12

