最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解JAVA設(shè)計模式之模板模式

 更新時間:2020年06月22日 09:31:55   作者:菜鳥教程  
這篇文章主要介紹了詳解JAVA設(shè)計模式之模板模式的的相關(guān)資料,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下

在模板模式(Template Pattern)中,一個抽象類公開定義了執(zhí)行它的方法的方式/模板。它的子類可以按需要重寫方法實現(xiàn),但調(diào)用將以抽象類中定義的方式進行。這種類型的設(shè)計模式屬于行為型模式。

介紹

意圖:定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。

主要解決:

一些方法通用,卻在每一個子類都重新寫了這一方法。

何時使用:

有一些通用的方法。

如何解決:

將這些通用算法抽象出來。

關(guān)鍵代碼:

在抽象類實現(xiàn),其他步驟在子類實現(xiàn)。

應(yīng)用實例:

1、在造房子的時候,地基、走線、水管都一樣,只有在建筑的后期才有加壁櫥加柵欄等差異。

2、西游記里面菩薩定好的 81 難,這就是一個頂層的邏輯骨架。

3、spring 中對 Hibernate 的支持,將一些已經(jīng)定好的方法封裝起來,比如開啟事務(wù)、獲取 Session、關(guān)閉 Session 等,程序員不重復寫那些已經(jīng)規(guī)范好的代碼,直接丟一個實體就可以保存。

優(yōu)點:

1、封裝不變部分,擴展可變部分。

2、提取公共代碼,便于維護。

3、行為由父類控制,子類實現(xiàn)。

缺點:

每一個不同的實現(xiàn)都需要一個子類來實現(xiàn),導致類的個數(shù)增加,使得系統(tǒng)更加龐大。

使用場景:

1、有多個子類共有的方法,且邏輯相同。

2、重要的、復雜的方法,可以考慮作為模板方法。

注意事項:

為防止惡意操作,一般模板方法都加上 final 關(guān)鍵詞。

實現(xiàn)

我們將創(chuàng)建一個定義操作的 Game 抽象類,其中,模板方法設(shè)置為 final,這樣它就不會被重寫。Cricket 和 Football 是擴展了 Game 的實體類,它們重寫了抽象類的方法。

TemplatePatternDemo,我們的演示類使用 Game 來演示模板模式的用法。

步驟 1

創(chuàng)建一個抽象類,它的模板方法被設(shè)置為 final。

public abstract class Game {
 abstract void initialize();
 abstract void startPlay();
 abstract void endPlay();
 
 //模板
 public final void play(){
 
 //初始化游戲
 initialize();
 
 //開始游戲
 startPlay();
 
 //結(jié)束游戲
 endPlay();
 }
}

步驟 2

創(chuàng)建擴展了上述類的實體類。

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!");
 }
}
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!");
 }
}

步驟 3

使用 Game 的模板方法 play() 來演示游戲的定義方式。

public class TemplatePatternDemo {
 public static void main(String[] args) {
 
 Game game = new Cricket();
 game.play();
 System.out.println();
 game = new Football();
 game.play(); 
 }
}

步驟 4

執(zhí)行程序,輸出結(jié)果:

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!

以上就是詳解JAVA設(shè)計模式之模板模式的詳細內(nèi)容,更多關(guān)于JAVA 模板模式的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 利用Java實現(xiàn)在線圖片URL轉(zhuǎn)換為Base64以及反向解析成圖片

    利用Java實現(xiàn)在線圖片URL轉(zhuǎn)換為Base64以及反向解析成圖片

    Base64 是一種將二進制數(shù)據(jù)編碼為 ASCII 字符串格式的方法,常用于在網(wǎng)絡(luò)中安全傳輸圖片、文件等內(nèi)容,本文給大家介紹了如何利用Java實現(xiàn)在線圖片URL轉(zhuǎn)換為Base64以及反向解析成圖片,文章有相關(guān)的代碼和圖文供大家參考,需要的朋友可以參考下
    2025-03-03
  • SSM框架把日志信息保存到數(shù)據(jù)庫過程詳解

    SSM框架把日志信息保存到數(shù)據(jù)庫過程詳解

    這篇文章主要介紹了SSM框架把日志信息保存到數(shù)據(jù)庫過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • Java模擬QQ實現(xiàn)聊天互動程序

    Java模擬QQ實現(xiàn)聊天互動程序

    這篇文章主要介紹了如何利用Java語言模擬QQ實現(xiàn)一個簡易的聊天互動程序,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2022-06-06
  • Spring Boot集成springfox-swagger2構(gòu)建restful API的方法教程

    Spring Boot集成springfox-swagger2構(gòu)建restful API的方法教程

    這篇文章主要給大家介紹了關(guān)于Spring Boot集成springfox-swagger2構(gòu)建restful API的相關(guān)資料,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面跟著小編一起來學習學習吧。
    2017-06-06
  • SpringCloud+SpringBoot項目搭建結(jié)構(gòu)層次的實例

    SpringCloud+SpringBoot項目搭建結(jié)構(gòu)層次的實例

    這篇文章詳細介紹了SpringCloud項目的架構(gòu)層次及其搭建經(jīng)驗,包括Controller層、Service層、Repository層、Entity層、DTO層、Exception層等,通過文字和圖片的形式,幫助讀者理解如何組織和實現(xiàn)一個SpringBoot項目的不同層次
    2025-01-01
  • 解決SpringCloud下spring-boot-maven-plugin插件的打包問題

    解決SpringCloud下spring-boot-maven-plugin插件的打包問題

    這篇文章主要介紹了SpringCloud下spring-boot-maven-plugin插件的打包問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • java實現(xiàn)簡單三子棋游戲

    java實現(xiàn)簡單三子棋游戲

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡單三子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java?中很好用的數(shù)據(jù)結(jié)構(gòu)(你絕對沒用過)

    Java?中很好用的數(shù)據(jù)結(jié)構(gòu)(你絕對沒用過)

    今天跟大家介紹的就是?java.util.EnumMap,也是?java.util?包下面的一個集合類,同樣的也有對應(yīng)的的?java.util.EnumSet,對java數(shù)據(jù)結(jié)構(gòu)相關(guān)知識感興趣的朋友一起看看吧
    2022-05-05
  • Java實現(xiàn)數(shù)字轉(zhuǎn)成英文的方法

    Java實現(xiàn)數(shù)字轉(zhuǎn)成英文的方法

    這篇文章主要介紹了Java實現(xiàn)數(shù)字轉(zhuǎn)成英文的方法,涉及java數(shù)組與字符串的相關(guān)操作技巧,需要的朋友可以參考下
    2015-05-05
  • Java深入淺出數(shù)組的定義與使用下篇

    Java深入淺出數(shù)組的定義與使用下篇

    數(shù)組是有序的元素序列,若將有限個類型相同的變量的集合命名,那么這個名稱為數(shù)組名。組成數(shù)組的各個變量稱為數(shù)組的分量,也稱為數(shù)組的元素,有時也稱為下標變量。數(shù)組是在程序設(shè)計中,為了處理方便,?把具有相同類型的若干元素按有序的形式組織起來的一種形式
    2022-03-03

最新評論

惠东县| 合水县| 大冶市| 会昌县| 永吉县| 二手房| 东方市| 张家界市| 江川县| 博爱县| 葫芦岛市| 班玛县| 崇明县| 儋州市| 金山区| 河东区| 闽侯县| 海晏县| 贵南县| 钟山县| 宜兰市| 甘孜| 偏关县| 东至县| 汶上县| 漠河县| 舞钢市| 长兴县| 金湖县| 乐都县| 杭州市| 青浦区| 曲靖市| 天全县| 育儿| 扬州市| 亚东县| 丹江口市| 辰溪县| 开封县| 吉木乃县|