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

Java行為型設(shè)計模式之模板方法詳解

 更新時間:2022年09月21日 15:05:50   作者:丨Jack_Chen丨  
模板方法的概念:定義了一個操作中的算法的骨架,而將部分步驟的實(shí)現(xiàn)在子類中完成。模板方法模式使得子類可以不改變一個算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟

模板方法模式

模板方法模式屬于行為型設(shè)計模式。它是指定義一個操作中的算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。

模板方法模式實(shí)際上是封裝了一個固定流程,該流程由幾個步驟組成,具體步驟可以由子類進(jìn)行不同實(shí)現(xiàn),從而讓固定的流程產(chǎn)生不同的結(jié)果。

模板方法模式的本質(zhì)是抽象封裝流程,具體進(jìn)行實(shí)現(xiàn)。

應(yīng)用場景

當(dāng)完成一個操作具有固定的流程時,由抽象固定流程步驟,具體步驟交給子類進(jìn)行具體實(shí)現(xiàn)(固定的流程,不同的實(shí)現(xiàn))。

1.實(shí)現(xiàn)一個算法的不變的部分(子類共有方法),將可變的行為留給子類來實(shí)現(xiàn)。

2.各子類中公共的行為被提取出來并集中到一個公共的父類中,以而避免代碼重復(fù)。

比如:入職資料的填寫,通常會有一系列的流程,只需要按照流程規(guī)則一步一步做即可。是目標(biāo)方法模式的體現(xiàn)。

主要角色

1.抽象模板(AbstractClass)

抽象模板類,定義了一套算法框架/流程。

2.具體實(shí)現(xiàn)(ConcreteClass)

具體實(shí)現(xiàn)類,對算法框架/流程的某些步進(jìn)行了實(shí)現(xiàn)。

優(yōu)缺點(diǎn)

1.將相同處理邏輯代碼放到抽象父類中,提高代碼的復(fù)用性。

2.將不同代碼放到不同子類中,通過對子類的擴(kuò)展增加新的行為,提高代碼的擴(kuò)展性。

3.把不變的行為寫在父類上,去除子類的重復(fù)代碼,提供了一個很好的代碼復(fù)用平臺,符合開閉原則

缺點(diǎn)

1.類數(shù)目的增加,每個抽象類都需要一個子類來實(shí)現(xiàn),這樣導(dǎo)致類的個數(shù)增加。

2.類數(shù)量的增加,間接地增加了系統(tǒng)實(shí)現(xiàn)的復(fù)雜度。

3.繼承關(guān)系自身缺點(diǎn),如果父類添加新的抽象方法,所有子類都要改一遍。

模板方法模式的基本使用

創(chuàng)建抽象模板角色

public abstract class AbstractClass {
    protected void step1() {
        System.out.println("AbstractClass:step1--->準(zhǔn)備入職材料");
    }
    protected void step2() {
        System.out.println("AbstractClass:step2--->填寫入職登記信息");
    }
    protected void step3() {
        System.out.println("AbstractClass:step3--->簽訂勞動合同");
    }
    protected void step4() {
        System.out.println("AbstractClass:step4--->辦理工牌,安排工位");
    }
    public final void templateMehthod() {
        this.step1();
        this.step2();
        this.step3();
        this.step4();
    }
}

創(chuàng)建具體實(shí)現(xiàn)

public class ConcreteClassA extends AbstractClass {
    @Override
    protected void step1() {
        System.out.println("ConcreateClassA:step1--->普通員工 準(zhǔn)備入職材料");
    }
}
public class ConcreteClassB extends AbstractClass {
    @Override
    protected void step1() {
        System.out.println("ConcreateClassA:step1--->關(guān)系戶 準(zhǔn)備入職材料");
    }
}

客戶端調(diào)用

    public static void main(String[] args) {
        System.out.println("--------------普通人入職------------");
        AbstractClass abcA = new ConcreteClassA();
        abcA.templateMehthod();
        System.out.println("--------------關(guān)系戶入職------------");
        AbstractClass  abcB = new ConcreteClassB();
        abcB.step3();
        abcB.step4();
    }

--------------普通人入職------------
ConcreateClassA:step1--->普通員工 準(zhǔn)備入職材料
AbstractClass:step2--->填寫入職登記信息
AbstractClass:step3--->簽訂勞動合同
AbstractClass:step4--->辦理工牌,安排工位
--------------關(guān)系戶入職------------
ConcreateClassA:step1--->關(guān)系戶 準(zhǔn)備入職材料
AbstractClass:step2--->填寫入職登記信息
AbstractClass:step3--->簽訂勞動合同
AbstractClass:step4--->辦理工牌,安排工位

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

相關(guān)文章

  • Java使用split分割無效獲取不到預(yù)期效果的解決辦法

    Java使用split分割無效獲取不到預(yù)期效果的解決辦法

    這篇文章主要給大家介紹了關(guān)于Java使用split分割無效獲取不到預(yù)期效果的解決辦法,java的String類中有個split方法,這個是我們經(jīng)常使用到的,需要的朋友可以參考下
    2023-08-08
  • SpringBoot環(huán)境搭建及第一個程序運(yùn)行(小白教程)

    SpringBoot環(huán)境搭建及第一個程序運(yùn)行(小白教程)

    這篇文章主要介紹了SpringBoot環(huán)境搭建及第一個程序運(yùn)行,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 微信APP支付Java代碼

    微信APP支付Java代碼

    這篇文章主要為大家詳細(xì)介紹了微信APP支付Java代碼,感興趣的小伙伴們可以參考一下
    2016-07-07
  • Idea Project文件目錄不見了,只剩External Libraries和imi文件的解決

    Idea Project文件目錄不見了,只剩External Libraries和imi文件的解決

    這篇文章主要介紹了Idea Project文件目錄不見了,只剩External Libraries和imi文件的解決方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 詳解Java中Dijkstra(迪杰斯特拉)算法的圖解與實(shí)現(xiàn)

    詳解Java中Dijkstra(迪杰斯特拉)算法的圖解與實(shí)現(xiàn)

    Dijkstra(迪杰斯特拉)算法是典型的單源最短路徑算法,用于計算一個節(jié)點(diǎn)到其他所有節(jié)點(diǎn)的最短路徑。本文將詳解該算法的圖解與實(shí)現(xiàn),需要的可以參考一下
    2022-05-05
  • Spring Boot拓展XML格式的請求和響應(yīng)操作過程

    Spring Boot拓展XML格式的請求和響應(yīng)操作過程

    在我們開發(fā)過程中,我們經(jīng)常使用的參數(shù)絕大多少事HTML和JSON格式的請求和響應(yīng)處理,但是我們在實(shí)際開發(fā)過程中,我們可能經(jīng)歷一些,比如對于XML格式的請求,本文給大家介紹Spring Boot拓展XML格式的請求和響應(yīng),感興趣的朋友一起看看吧
    2023-10-10
  • Spring boot+mybatis+thymeleaf 實(shí)現(xiàn)登錄注冊增刪改查功能的示例代碼

    Spring boot+mybatis+thymeleaf 實(shí)現(xiàn)登錄注冊增刪改查功能的示例代碼

    這篇文章主要介紹了Spring boot+mybatis+thymeleaf 實(shí)現(xiàn)登錄注冊增刪改查功能的示例代碼,本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • Springboot居然可以設(shè)置動態(tài)的Banner(推薦)

    Springboot居然可以設(shè)置動態(tài)的Banner(推薦)

    這篇文章主要介紹了Springboot居然可以設(shè)置動態(tài)的Banner,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • 使用log4j2關(guān)閉debug日志

    使用log4j2關(guān)閉debug日志

    這篇文章主要介紹了使用log4j2關(guān)閉debug日志方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 淺談如何優(yōu)雅地停止Spring Boot應(yīng)用

    淺談如何優(yōu)雅地停止Spring Boot應(yīng)用

    這篇文章主要介紹了淺談如何優(yōu)雅地停止Spring Boot應(yīng)用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05

最新評論

婺源县| 南投市| 南通市| 黔东| 万山特区| 荥经县| 石屏县| 那曲县| 延庆县| 浙江省| 淮北市| 广德县| 额济纳旗| 临江市| 赞皇县| 屯留县| 鄂温| 安溪县| 鞍山市| 察哈| 安塞县| 万州区| 枞阳县| 肃宁县| 开江县| 中山市| 广宁县| 靖西县| 溧水县| 荔波县| 象山县| 秦皇岛市| 通海县| 葫芦岛市| 石阡县| 南皮县| 南城县| 鸡东县| 台湾省| 阳山县| 汪清县|