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

Java設計模式之Template?Pattern模板模式詳解

 更新時間:2023年10月09日 08:33:49   作者:十維豆腦  
這篇文章主要介紹了Java設計模式之Template?Pattern模板模式詳解,模板模式(Template?Pattern)行為型模式之一,抽象父類定義一個操作中的算法的骨架,而將一些步驟延遲到子類中,需要的朋友可以參考下

一、定義

模板模式(Template Pattern):行為型模式之一,抽象父類定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。

二、UML類圖

在這里插入圖片描述

三、角色職責

抽象類/抽象模板(Abstract Class):抽象模板類,負責給出一個算法的輪廓和骨架。 它

由一個模板方法和若干個基本方法構成。這些方法的定義如下:

  • 模板方法:定義了一套算法的骨架,按某種順序調用其包含的基本方法。
  • 基本方法:是算法骨架/流程的某些步驟進行具體實現,包含以下幾種類型,
  • 抽象方法:在抽象類中聲明,由具體子類實現。 具體方法:在抽象類中已經實現,在具體子類中可以繼承或重寫它。
  • 鉤子方法:在抽象類中已經實現,包括用于判斷的邏輯方法和需要子類重寫的空方法兩種。

具體子類/具體實現(Concrete Class):具體實現類,實現抽象類中所定義的抽象方法和鉤子方法,它們是一個頂級邏輯的一個組成步驟。

四、代碼實現

前言:在平時工作中就經常會用到模板方法,就像我們公司的框架里使用的Excel導入功能EasyExcel,就是一個非常典型的模板方法,我們通常會頂一個抽象類并在里面規(guī)定出一些模板方法和基本方法,再由具體的實現類去進行調用或者重寫,下面就用代碼給大家舉個栗子。

導入抽象類(抽象類 Abstract Class)

abstract class ImportAbstractClass {
    public void TemplateMethod() {
        validateColumn();
        validateField();
        bizHandle();
    }
    public void validateColumn() {
        System.out.println("校驗導入Excel的列名...");
    }
    public abstract void validateField();
    public abstract void bizHandle();
}

導入訂單實現類(具體子類 Concrete Class)

public class ImportOrderClass extends ImportAbstractClass {
    @Override
    public void validateField() {
        System.out.println("校驗導入訂單字段...");
    }
    @Override
    public void bizHandle() {
        System.out.println("訂單業(yè)務處理...");
    }
}

導入商品實現類(具體子類 Concrete Class)

public class ImportProductClass extends ImportAbstractClass {
    @Override
    public void validateField() {
        System.out.println("校驗導入商品字段...");
    }
    @Override
    public void bizHandle() {
        System.out.println("商品業(yè)務處理...");
    }
}

測試類

public class TemplateTest {
    public static void main(String[] args) {
        ImportAbstractClass order = new ImportOrderClass();
        order.TemplateMethod();
        ImportAbstractClass product = new ImportProductClass();
        product.TemplateMethod();
    }
}

輸出結果

校驗導入Excel的列名...
校驗導入訂單字段...
訂單業(yè)務處理...
校驗導入Excel的列名...
校驗導入商品字段...
商品業(yè)務處理...

五、源碼分析

模板模式的應用場景非常多,就比如我們常用的MyBatis中的BaseExecutor類就使用到了模板模式。

在這里插入圖片描述

在主流程中,我們可以直接調用query方法,也可以通過實現抽象方法doQuery進行使用。

六、優(yōu)缺點分析

優(yōu)點:

  • 不變部分封裝到父類實現,而把可變部分由子類繼承實現,便于子類繼續(xù)擴展。
  • 在父類中提取了公共的部分代碼,便于代碼復用。
  • 部分方法是由子類實現的,因此子類可以通過擴展方式增加相應的功能,符合開閉原則。

缺點:

  • 對每個不同的實現都需要定義一個子類,導致類的個數增加,系統更龐大,設計更抽象。
  • 父類中的抽象方法由子類實現,子類執(zhí)行的結果會影響父類的結果,它提高了代碼閱讀的難度。

七、適用場景

  • 多個子類有共有的方法,并且邏輯基本相同。
  • 重要、復雜的算法,可以把核心算法設計為模板方法,周邊的相關細節(jié)功能則由各個子類實現。

八、總結

當我們要完成在某一細節(jié)層次一致的一個過程或一系列步驟,但其個別步驟在更詳細的層次上的實現可能不同時,我們通??紤]模板方法模式來處理。模板模式只是在一定程度上完成了解耦的操作,當不變的和可變的行為在方法的子類實現中混合在一起的時候,不變的行為就會在子類中重復出現。我們通過模板方法模式把這些行文搬移到單一的地方(提取公有部分,抽象成抽象方法),這樣就幫助子類擺脫重復的不變行為的糾纏。

到此這篇關于Java設計模式之Template Pattern模板模式詳解的文章就介紹到這了,更多相關Template Pattern模板模式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Spring Security Oauth2.0 實現短信驗證碼登錄示例

    Spring Security Oauth2.0 實現短信驗證碼登錄示例

    本篇文章主要介紹了Spring Security Oauth2.0 實現短信驗證碼登錄示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Java實現Huffman編碼的示例代碼

    Java實現Huffman編碼的示例代碼

    Huffman編碼是一種編碼方式,本文主要介紹了Java實現Huffman編碼的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • Springboot實例講解實現專業(yè)材料認證管理系統流程

    Springboot實例講解實現專業(yè)材料認證管理系統流程

    這是一個基于java的畢業(yè)設計項目,畢設課題為springboot框架的知識產權服務平臺系統,是一個采用b/s結構的javaweb項目,需要的朋友可以參考下
    2022-06-06
  • 詳細分析Java Lambda表達式

    詳細分析Java Lambda表達式

    這篇文章主要介紹了Java Lambda表達式的相關資料,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • Java靜態(tài)static與實例instance方法示例

    Java靜態(tài)static與實例instance方法示例

    這篇文章主要為大家介紹了Java靜態(tài)static與實例instance方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • java 中HashMap、HashSet、TreeMap、TreeSet判斷元素相同的幾種方法比較

    java 中HashMap、HashSet、TreeMap、TreeSet判斷元素相同的幾種方法比較

    這篇文章主要介紹了從源碼的角度淺析HashMap、TreeMap元素的存儲和獲取元素的邏輯;從Map與Set之間的關系淺析常用的Set中元素的存儲和判斷是否重復的邏輯,需要的朋友可以參考下
    2017-01-01
  • MyBatis-Plus忽略多租戶隔離自定義注解

    MyBatis-Plus忽略多租戶隔離自定義注解

    本文主要介紹了MyBatis-Plus忽略多租戶隔離自定義注解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-12-12
  • Java?中向?Arraylist?添加對象的示例代碼

    Java?中向?Arraylist?添加對象的示例代碼

    本文介紹了如何在 Java 中向 ArrayList 添加對象,并提供了示例和注意事項,通過掌握這些知識,讀者可以在自己的 Java 項目中有效地使用 ArrayList 來存儲和操作對象,需要的朋友可以參考下
    2023-11-11
  • JavaFX實現簡易時鐘效果(一)

    JavaFX實現簡易時鐘效果(一)

    這篇文章主要為大家詳細介紹了JavaFX實現簡易時鐘效果的第一篇,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • SpringBoot使用jsr303校驗的實現

    SpringBoot使用jsr303校驗的實現

    這篇文章主要介紹了SpringBoot使用jsr303校驗的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10

最新評論