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

Java模板方法模式定義算法框架

 更新時(shí)間:2023年05月04日 09:01:50   作者:.番茄炒蛋  
Java模板方法模式是一種行為型設(shè)計(jì)模式,它定義了一個(gè)算法框架,由抽象父類定義算法的基本結(jié)構(gòu),具體實(shí)現(xiàn)細(xì)節(jié)由子類來實(shí)現(xiàn),從而實(shí)現(xiàn)代碼復(fù)用和擴(kuò)展性

介紹

? Java中的模板方法模式是一種行為設(shè)計(jì)模式,用于定義算法的框架并允許子類重寫某些步驟,同時(shí)不改變算法的結(jié)構(gòu).

? 該模式基于開放/關(guān)閉原則,即對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉,在模板方法模式中,父類定義了一個(gè)算法的骨架,而子類可以通過實(shí)現(xiàn)父類的抽象方法,來自定義某些步驟的行為,整個(gè)算法步驟不會(huì)因?yàn)樽宇惖母淖兌淖?/p>

? 模板方法模式通常包括一個(gè)抽象類和若干個(gè)具體子類,抽象類中定義了算法的框架,包括一些基本的方法和一個(gè)模板方法.模板方法是一個(gè)模板,其中包含了算法的步驟,每個(gè)步驟都有一個(gè)抽象方法或一個(gè)默認(rèn)方法實(shí)現(xiàn),具體的子類可以通過實(shí)現(xiàn)這些抽象方法來實(shí)現(xiàn)自己的行為.

? 抽象類中還可以有鉤子函數(shù),鉤子函數(shù)通常是抽象類中的虛函數(shù),其默認(rèn)實(shí)現(xiàn)為空,這樣子類可以選擇覆蓋該函數(shù)來實(shí)現(xiàn)特定的行為.在模板方法模式中,鉤子函數(shù)通常用于在算法的某些特定步驟中進(jìn)行特定的操作或檢查條件.鉤子函數(shù)的另一個(gè)用途是提供一種擴(kuò)展算法的方法,子類可以通過覆蓋鉤子函數(shù)來添加額外的步驟或者修改算法的行為.總之鉤子函數(shù)是模板方法模式中的一個(gè)重要概念,可以用來影響算法的行為或者擴(kuò)展算法的功能.

實(shí)現(xiàn)

首先定義咖啡抽象類

package com.fanqiechaodan.templatemethod;
/**
 * @Classname CoffeeMaker
 * @Description 咖啡抽象類
 */
public abstract class CoffeeMaker {
    public final void makeCoffee() {
        boilWater();
        brewCoffee();
        pourInCup();
        if (isCondiments()) {
            addCondiments();
        }
    }
    private void boilWater() {
        System.out.println("煮水");
    }
    protected abstract void brewCoffee();
    private void pourInCup() {
        System.out.println("倒入杯子中");
    }
    /**
     * 鉤子函數(shù);是否加入調(diào)料,由子類決定是否重寫
     *
     * @return
     */
    protected boolean isCondiments() {
        return true;
    }
    protected abstract void addCondiments();
}

其次定義兩個(gè)具體子類

public class AmericanoMaker extends CoffeeMaker{
    @Override
    protected void brewCoffee() {
        System.out.println("沖泡美式咖啡");
    }
    @Override
    protected void addCondiments() {
        System.out.println("加入牛奶和糖");
    }
    /**
     * 鉤子函數(shù);是否加入調(diào)料,由子類決定是否重寫
     *
     * @return
     */
    @Override
    protected boolean isCondiments() {
        return false;
    }
}
public class LatteMaker extends CoffeeMaker{
    @Override
    protected void brewCoffee() {
        System.out.println("沖泡濃縮咖啡");
    }
    @Override
    protected void addCondiments() {
        System.out.println("添加奶泡和焦糖醬");
    }
}

測(cè)試

package com.fanqiechaodan.templatemethod;
/**
 * @author fanqiechaodan
 * @Classname Demo
 * @Description 模板方法模式
 * @Date 2023/3/9 18:57
 */
public class Demo {
    public static void main(String[] args) {
        CoffeeMaker americanoMaker = new AmericanoMaker();
        americanoMaker.makeCoffee();
        System.out.println();
        CoffeeMaker latteMaker = new LatteMaker();
        latteMaker.makeCoffee();
    }
}

總結(jié)

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

  • 提高代碼復(fù)用性:模板方法模式將通用算法代碼封裝在父類中,子類只需要特定的方法即可,從而提高了代碼的復(fù)用性.
  • 保證算法結(jié)構(gòu)的一致性:模板方法模式規(guī)定了算法的基本流程和結(jié)構(gòu),確保所有子類實(shí)現(xiàn)的算法結(jié)構(gòu)一致,從而提高了代碼的可維護(hù)性和可擴(kuò)展性.
  • 降低代碼耦合度:通過將具體實(shí)現(xiàn)細(xì)節(jié)封裝在子類中,父類與子類之間的耦合度降低,提高了代碼的靈活性和可擴(kuò)展性.

缺點(diǎn)

  • 可能會(huì)導(dǎo)致類的數(shù)量增加:使用模板方法模式需要定義抽象類和具體實(shí)現(xiàn)類,這可能會(huì)導(dǎo)致類的數(shù)量增加,從而增加代碼的復(fù)雜度.
  • 限制子類的靈活性:模板方法規(guī)定了算法的基本流程和結(jié)構(gòu),子類需要按照這個(gè)結(jié)構(gòu)去實(shí)現(xiàn),這可能會(huì)限制子類的靈活性.

應(yīng)用場(chǎng)景

  • 當(dāng)我們需要定義一個(gè)算法骨架結(jié)構(gòu),從而具體實(shí)現(xiàn)細(xì)節(jié)可以在子類中進(jìn)行定義時(shí),可以使用模板方法模式.
  • 當(dāng)我們需要一些復(fù)雜的算法分解為一系列簡(jiǎn)單的步驟,并且這些步驟的順序和流程都是固定的時(shí),可以使用模板方法模式
  • 當(dāng)我們需要在多個(gè)子類中共享一些公共的代碼時(shí),可以使用模板方法模式,將這些公共的代碼封裝在父類中.

到此這篇關(guān)于Java模板方法模式定義算法框架的文章就介紹到這了,更多相關(guān)Java模板方法模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring mvc高級(jí)技術(shù)實(shí)例詳解

    spring mvc高級(jí)技術(shù)實(shí)例詳解

    前面學(xué)習(xí)了簡(jiǎn)單的Spring Web知識(shí),接著學(xué)習(xí)更高階的Web技術(shù)。下面這篇文章主要給大家介紹了spring mvc高級(jí)技術(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起看看吧
    2018-09-09
  • Java中Spring的單例模式使用

    Java中Spring的單例模式使用

    這篇文章主要介紹了Java中Spring的單例模式使用,spring中的單例也不影響應(yīng)用并發(fā)訪問。大多數(shù)時(shí)候客戶端都在訪問我們應(yīng)用中的業(yè)務(wù)對(duì)象,為減少并發(fā)控制,不應(yīng)該在業(yè)務(wù)對(duì)象中設(shè)置那些容易造成出錯(cuò)的成員變量,下面一起進(jìn)入文章了解更多詳細(xì)內(nèi)容吧
    2022-01-01
  • 基于springboot處理date參數(shù)過程解析

    基于springboot處理date參數(shù)過程解析

    這篇文章主要介紹了基于springboot處理date參數(shù)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • rabbitmq消息ACK確認(rèn)機(jī)制及發(fā)送失敗處理方式

    rabbitmq消息ACK確認(rèn)機(jī)制及發(fā)送失敗處理方式

    這篇文章主要介紹了rabbitmq消息ACK確認(rèn)機(jī)制及發(fā)送失敗處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java處理科學(xué)計(jì)數(shù)法數(shù)字方式

    Java處理科學(xué)計(jì)數(shù)法數(shù)字方式

    這篇文章主要介紹了Java處理科學(xué)計(jì)數(shù)法數(shù)字方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 解決mybatis 數(shù)據(jù)庫(kù)date 與 java中Date類型映射問題

    解決mybatis 數(shù)據(jù)庫(kù)date 與 java中Date類型映射問題

    這篇文章主要介紹了解決mybatis 數(shù)據(jù)庫(kù)date 與 java中Date類型映射問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來吧
    2020-11-11
  • Java可重入鎖reentrantLock解析

    Java可重入鎖reentrantLock解析

    這篇文章主要介紹了Java可重入鎖reentrantLock解析,reentrantLock跟synchronized代碼結(jié)構(gòu)差不多,只是多了一個(gè)lock和unlock的過程,需要的朋友可以參考下
    2023-12-12
  • Java使用JXLS實(shí)現(xiàn)導(dǎo)出Excel

    Java使用JXLS實(shí)現(xiàn)導(dǎo)出Excel

    jxls作為一個(gè)開源工具,提供了一種高效且易于維護(hù)的方式來處理復(fù)雜的Excel導(dǎo)出需求,下面就跟隨小編一起來學(xué)習(xí)一下如何使用jxls實(shí)現(xiàn)導(dǎo)出Excel吧
    2025-01-01
  • Java swing仿酷狗音樂播放器

    Java swing仿酷狗音樂播放器

    這篇文章主要為大家詳細(xì)介紹了Java swing實(shí)現(xiàn)音樂播放器,Java開發(fā)圖形界面程序音樂播放器仿酷狗音樂播放器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Spring?Boot?+?EasyExcel實(shí)現(xiàn)數(shù)據(jù)導(dǎo)入導(dǎo)出

    Spring?Boot?+?EasyExcel實(shí)現(xiàn)數(shù)據(jù)導(dǎo)入導(dǎo)出

    這篇文章主要介紹了Spring?Boot+EasyExcel實(shí)現(xiàn)數(shù)據(jù)導(dǎo)入導(dǎo)出,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-08-08

最新評(píng)論

武乡县| 柘荣县| 龙泉市| 新平| 二手房| 利川市| 弥渡县| 田阳县| 宣威市| 邯郸市| 沅江市| 阜康市| 松滋市| 仪征市| 宁南县| 鄄城县| 昌平区| 浙江省| 乐陵市| 民权县| 南雄市| 万山特区| 云龙县| 米泉市| 新源县| 湘西| 景谷| 阿合奇县| 阿城市| 淳化县| 娄烦县| 山阴县| 平罗县| 黄陵县| 淮阳县| 景东| 郸城县| 宣武区| 怀柔区| 双流县| 廊坊市|