欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解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 等,程序員不重復(fù)寫那些已經(jīng)規(guī)范好的代碼,直接丟一個實體就可以保存。

優(yōu)點:

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

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

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

缺點:

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

使用場景:

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

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

注意事項:

為防止惡意操作,一般模板方法都加上 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生成二維碼工具類示例代碼

    利用java生成二維碼工具類示例代碼

    二維碼對現(xiàn)在的人們來說再熟悉不過了,我們在開發(fā)的時候也經(jīng)常會用到二維碼,下面這篇文章主要給大家介紹了關(guān)于利用java生成二維碼工具類的相關(guān)資料,文中給了詳細的示例代碼,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-09-09
  • mybatis教程之動態(tài)sql語句_動力節(jié)點Java學院整理

    mybatis教程之動態(tài)sql語句_動力節(jié)點Java學院整理

    這篇文章主要介紹了mybatis教程之動態(tài)sql語句,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Springboot集成百度地圖實現(xiàn)定位打卡的示例代碼

    Springboot集成百度地圖實現(xiàn)定位打卡的示例代碼

    本文主要介紹了Springboot集成百度地圖實現(xiàn)定位打卡的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-02-02
  • Spring Boot中擴展XML請求與響應(yīng)的支持詳解

    Spring Boot中擴展XML請求與響應(yīng)的支持詳解

    這篇文章主要給大家介紹了關(guān)于Spring Boot中擴展XML請求與響應(yīng)的支持的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-09-09
  • Java多線程實現(xiàn)簡易微信發(fā)紅包的方法實例

    Java多線程實現(xiàn)簡易微信發(fā)紅包的方法實例

    這篇文章主要給大家介紹了關(guān)于Java多線程實現(xiàn)簡易微信發(fā)紅包的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • Java動態(tài)數(shù)組Arraylist存放自定義數(shù)據(jù)類型方式

    Java動態(tài)數(shù)組Arraylist存放自定義數(shù)據(jù)類型方式

    這篇文章主要介紹了Java動態(tài)數(shù)組Arraylist存放自定義數(shù)據(jù)類型方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 基于SpringBoot的Docker部署實踐

    基于SpringBoot的Docker部署實踐

    在云計算和微服務(wù)架構(gòu)日益普及的今天,Docker已成為一種主流的應(yīng)用部署方式,本文將詳細介紹如何將基于Spring Boot的項目部署到Docker容器中,需要的朋友可以參考下
    2023-07-07
  • SpringSecurity自定義AuthenticationProvider無法@Autowire的解決

    SpringSecurity自定義AuthenticationProvider無法@Autowire的解決

    這篇文章主要介紹了SpringSecurity自定義AuthenticationProvider無法@Autowire的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java利用多線程復(fù)制文件

    Java利用多線程復(fù)制文件

    這篇文章主要介紹了Java利用多線程復(fù)制文件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • 如何優(yōu)雅的替換掉Java代碼中的if else

    如何優(yōu)雅的替換掉Java代碼中的if else

    這篇文章主要介紹了如何優(yōu)雅的替換掉Java代碼中的if else,幫助大家優(yōu)化自己的Java代碼,提高可讀性與簡潔性,感興趣的朋友可以了解下
    2020-09-09

最新評論