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

Java設計模式模板方法模式(Template)用法解析

 更新時間:2019年11月18日 10:23:53   作者:brucegan  
這篇文章主要介紹了Java設計模式模板方法模式(Template)用法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

這篇文章主要介紹了Java設計模式模板方法模式(Template)用法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

前言:

  我們在開發(fā)中有很多固定的流程,這些流程有很多步湊是固定的,比如JDBC中獲取連接,關閉連接這些流程是固定不變的,變動的只有設置參數(shù),解析結果集這些是根據(jù)不同的實體對象“來做調(diào)整”,針對這種擁有固定算法流程,其中有固定的步湊,存在不固定的步湊的情況下就誕生了模板方法模式。

模板方法模式(Template)定義:

  模板方法模式又叫模板模式,指的是父類定義了一個多步湊的算法骨架,其中很多步湊是在父類中實現(xiàn)了的,有的步湊是根據(jù)不同的子類擁有不同的實現(xiàn),就把這些“不確定”的實現(xiàn)步湊定義為抽象方法交給子類去實現(xiàn)。模板模式的核心就是在使子類不改變算法結構的情況下,重新定義算法的某些步湊。屬于行為型設計模式。

應用很廣發(fā),比如Mybatis中的BaseExecutor;Spring中的JdbcTemplate;Spring集成Hibernate中的HibernateTemplate,Spring集成各種Mq的Template,還有MongodbTemplate等......

模式中的角色:

  抽象類(AbstractClass):實現(xiàn)了模板方法,定義了算法的骨架。

  具體類 (Concrete):實現(xiàn)了抽象類中抽象放,使得父類定義的算法更完整。

代碼實現(xiàn):

  1:用抽象類定義流程,比如我們每天上班有個流程: 開機-->寫代碼(不同的程序員可能寫不同的代碼-->關機; 整個流程中開機和關機是相同的,只是寫代碼這個步湊不同,java程序員寫java代碼,Php程序員寫Php代碼; 我們先用一個抽象的父類定義這個流程:

public abstract class Work {

  //定義算法步湊流程
  public void workDay(){

    //1:上班開機
    openComputer();
    //2:搬磚:寫代碼
    coding();
    //3:下班關機     closeComputer();
  }

  //開機
  private final void openComputer() {
    System.out.println("到達公司,開機");
  }

  //寫代碼
  protected abstract void coding();

  //關機
  private final void closeComputer() {
    System.out.println("下班,關機");
  }

}

2:具體實現(xiàn)

Java程序員

public class JavaProgrammer extends Work {
  
  @Override
  protected void coding() {
    System.out.println("Java程序員打開Idea,寫Java代碼。。。");
  }
}

PHP程序員

public class PhpProgrammer extends Work {

  @Override
  protected void coding() {
    System.out.println("PHP程序員打開Zend Studio,寫Php代碼。。。");
  }
}

3:使用

public class TemplateMethodDemo {

  public static void main(String[] args) {
    Work javaProgrammer = new JavaProgrammer();
    javaProgrammer.workDay();
    System.out.println("================");
    Work phpProgrammer = new PhpProgrammer();
    phpProgrammer.workDay();
  }
}

運行結果

模板模式在源碼中的體現(xiàn):

1:我們每天都在使用的HttpServlet里面的service方法,service方法里面定義了調(diào)用流程,根據(jù)客戶端調(diào)用的不同方式,if else邏輯判斷調(diào)用不同的方法,比如doGet,doPost,doDelete等實現(xiàn)restful調(diào)用,具體的doGet,doPost方法實現(xiàn)我們可以在我們自己定義的Servlet中進行重寫。

2:Mybatis框架中也有一些經(jīng)典實用,比如BaseExecutor類,它是一個基礎的SQL執(zhí)行類,實現(xiàn)了大部分SQL的執(zhí)行邏輯,然后把幾個方法教給子類定制化完成,源碼如下:

其中doUpdate(),doFlushStatements(),doQuery(),doQueryCursor()等方法都是由子類來實現(xiàn)的,BaseExecutor有那些子類呢?我們來看一下他的類圖:

我們可以去看看具體每個子類的不同的實現(xiàn)。

模板模式的優(yōu)缺點:

  優(yōu)點:

  1:利用模板模式可以將相同處理邏輯的代碼放到抽象父類中,提高了代碼的復用性。

  2:將不同的邏輯放到不同的子類中,通過子類的擴展增加新的行為,提高了代碼的擴展性。

  3:把不變的行為寫在父類中,去除了子類的重復代碼,提供了一個很好的代碼復用平臺,符合開閉原則。

  4:公司的高級工程師或者架構師在項目前期可以利用模板模式定義好流程,讓其他編碼功工程師去實現(xiàn)具體。

  缺點:

  1:每個抽象類都需要至少一個子類來實現(xiàn),導致了類數(shù)量的增加。

  2:類數(shù)量增加間接增加了系統(tǒng)的復雜性。

  3:因為繼承關系的自身缺點,如果父類添加一個新的抽象方法,素有子類都要實現(xiàn)一遍。

代碼鏈接:https://gitee.com/ganganbobo/gps-parent

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 在Mybatis中使用自定義緩存ehcache的方法

    在Mybatis中使用自定義緩存ehcache的方法

    這篇文章主要介紹了在Mybatis中使用自定義緩存ehcache的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • ApiOperation和ApiParam注解依賴的安裝和使用以及注意事項說明

    ApiOperation和ApiParam注解依賴的安裝和使用以及注意事項說明

    這篇文章主要介紹了ApiOperation和ApiParam注解依賴的安裝和使用以及注意事項說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • java long轉String +Codeforces110A案例

    java long轉String +Codeforces110A案例

    這篇文章主要介紹了java long轉String +Codeforces110A案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 使用springboot對linux進行操控的方法示例

    使用springboot對linux進行操控的方法示例

    這篇文章主要介紹了使用springboot對linux進行操控的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • java獲取兩個List集合的交集代碼示例

    java獲取兩個List集合的交集代碼示例

    這篇文章主要給大家介紹了關于java獲取兩個List集合交集的相關資料,我們可以使用Stream操作來對集合進行一系列的操作,其中包括求交集,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • springboot+Vue實現(xiàn)分頁的示例代碼

    springboot+Vue實現(xiàn)分頁的示例代碼

    本文主要介紹了springboot+Vue實現(xiàn)分頁的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-06-06
  • Spring使用@Autowired注解實現(xiàn)自動裝配方式

    Spring使用@Autowired注解實現(xiàn)自動裝配方式

    這篇文章主要介紹了Spring使用@Autowired注解實現(xiàn)自動裝配方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java8 多個list對象用lambda求差集操作

    java8 多個list對象用lambda求差集操作

    這篇文章主要介紹了java8 多個list對象用lambda求差集操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java使用for循環(huán)解決經(jīng)典的雞兔同籠問題示例

    Java使用for循環(huán)解決經(jīng)典的雞兔同籠問題示例

    這篇文章主要介紹了Java使用for循環(huán)解決經(jīng)典的雞兔同籠問題,結合實例形式分析了Java巧妙使用流程控制語句for循環(huán)解決雞兔同籠問題相關操作技巧,需要的朋友可以參考下
    2018-05-05
  • Java連接MYSQL數(shù)據(jù)庫的詳細步驟

    Java連接MYSQL數(shù)據(jù)庫的詳細步驟

    這篇文章主要為大家介紹了Java連接MYSQL數(shù)據(jù)庫的詳細步驟,感興趣的小伙伴們可以參考一下
    2016-05-05

最新評論