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

深入理解Java設(shè)計(jì)模式之模板方法模式

 更新時(shí)間:2021年11月07日 14:43:58   作者:一指流砂~  
這篇文章主要介紹了JAVA設(shè)計(jì)模式之模板方法模式的的相關(guān)資料,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解

一、什么是模板方法模式

模板方法模式在一個(gè)方法中定義一個(gè)算法的骨架,而將一些步驟的實(shí)現(xiàn)延遲到子類中。模板方法使得子類可以在不改變算法結(jié)構(gòu)的情況下,重新定義算法中某些步驟的具體實(shí)現(xiàn)。

看到“設(shè)計(jì)模式”這四個(gè)字我們往往會覺得高深莫測,但是模板方法模式卻是一個(gè)例外,你要關(guān)注的就是一個(gè)方法而已。

模板方法模式確實(shí)非常簡單,僅僅使用繼承機(jī)制,但是它是一個(gè)應(yīng)用非常廣泛的模式。

二、模板方法模式的使用場景

當(dāng)系統(tǒng)中算法的骨架是固定的時(shí)候,而算法的實(shí)現(xiàn)可能有很多種的時(shí)候,就需要使用模板方法模式。

  • 多個(gè)子類有共有的方法,并且邏輯基本相同
  • 重要、復(fù)雜的算法,可以把核心算法設(shè)計(jì)為模板方法,周邊的相關(guān)細(xì)節(jié)功能則由各個(gè)子類實(shí)現(xiàn)
  • 重構(gòu)時(shí),模板方法是一個(gè)經(jīng)常使用的方法,把相同的代碼抽取到父類中,然后通過構(gòu)造函數(shù)約束其行為。

舉例:需要做一個(gè)報(bào)表打印程序,用戶規(guī)定需要表頭,正文,表尾。但是客戶的需求會變化,一會希望這樣顯示表頭,一會希望那樣顯示。

這時(shí)候采用模板方式就合適。

三、模板方法模式的優(yōu)缺點(diǎn)

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

封裝不變部分,擴(kuò)展可變部分。把認(rèn)為不變部分的算法封裝到父類中實(shí)現(xiàn),而可變部分的則可以通過繼承來繼續(xù)擴(kuò)展。提取公共部分代碼,便于維護(hù)。行為由父類控制,子類實(shí)現(xiàn)

缺點(diǎn):

算法骨架需要改變時(shí)需要修改抽象類。

按照設(shè)計(jì)習(xí)慣,抽象類負(fù)責(zé)聲明最抽象、最一般的事物屬性和方法,實(shí)現(xiàn)類負(fù)責(zé)完成具體的事務(wù)屬性和方法,但是模板方式正好相反,子類執(zhí)行的結(jié)果影響了父類的結(jié)果,會增加代碼閱讀的難度。

四、模板方法模式的實(shí)現(xiàn)

AbstractClass類---抽象模板類,定義并實(shí)現(xiàn)了一個(gè)模板方法。

這個(gè)模板一般是一個(gè)具體方法,它給出了一個(gè)頂級邏輯的骨架,而邏輯的組成步驟在相應(yīng)的抽象操作中,推遲到子類實(shí)現(xiàn)。
頂級邏輯也有可以調(diào)用具體的方法

abstract class AbstractClass
{
    //一些抽象行為放到子類去實(shí)現(xiàn)
    public abstract void PrivateOperation1();
    public abstract void PrivateOperation2();
     //模板方法,給出了邏輯的骨架,而邏輯的組成是一些相應(yīng)的抽象操作,它們都推遲到子類實(shí)現(xiàn)
    public void TemplateMethod()
    {
        PrivateOperation1();
        PrivateOperation2();
        Console.WriteLine("");
    }
}

ConcreteClass類,實(shí)現(xiàn)父類所定義的一個(gè)或者多個(gè)抽象方法。

每一個(gè)AbstractClass都可以有任意多個(gè)ConcreteClass與之對應(yīng),而每一個(gè)ConcreteClass都可以給出這些抽象方法的不同實(shí)現(xiàn),從而使得頂級邏輯的實(shí)現(xiàn)各不相同。

class ConcreteClassA : AbstractClass
{
    public override void PrivateOperation1()
    {
        Console.WriteLine("具體類A方法1實(shí)現(xiàn)");
    }
     public override void PrivateOperation2()
    {
        Console.WriteLine("具體類A方法2實(shí)現(xiàn)");
    }
}
class ConcreteClassB : AbstractClass
{
    public override void PrivateOperation1()
    {
        Console.WriteLine("具體類B方法1實(shí)現(xiàn)");
    }
     public override void PrivateOperation2()
    {
        Console.WriteLine("具體類B方法2實(shí)現(xiàn)");
    }
}

客戶端代碼

static void Main(string[] args)
{
    AbstractClass c;
    c = new ConcreteClassA();
    c.TemplateMethod();
     c = new ConcreteClassB();
    c.TemplateMethod();
     Console.Read();
}

五、總結(jié)

重復(fù)=易錯(cuò)+難改,模板方法模式是通過父類建立框架,子類在重寫了父類部分方法之后,在調(diào)用從父類繼承的方法,產(chǎn)生不同的效果,通過修改子類,影響父類行為的結(jié)果,模板方法在一些開源框架中應(yīng)用非常多,它提供了一個(gè)抽象類,然后開源框架寫了一堆子類,如果需要擴(kuò)展功能,可以繼承此抽象類,然后覆寫protected基本方法,然后在調(diào)用一個(gè)類似TemplateMethod()的模板方法,完成擴(kuò)展開發(fā)。

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • SpringBoot加載應(yīng)用事件監(jiān)聽器代碼實(shí)例

    SpringBoot加載應(yīng)用事件監(jiān)聽器代碼實(shí)例

    這篇文章主要介紹了SpringBoot加載應(yīng)用事件監(jiān)聽器代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Java實(shí)戰(zhàn)練習(xí)之撲克牌魔術(shù)

    Java實(shí)戰(zhàn)練習(xí)之撲克牌魔術(shù)

    這篇文章主要介紹了Java實(shí)戰(zhàn)練習(xí)之撲克牌魔術(shù),文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-04-04
  • Spring實(shí)現(xiàn)資源的動(dòng)態(tài)加載和卸載的方法小結(jié)

    Spring實(shí)現(xiàn)資源的動(dòng)態(tài)加載和卸載的方法小結(jié)

    這篇文章主要介紹了Spring實(shí)現(xiàn)資源的動(dòng)態(tài)加載和卸載的方法小結(jié),文中通過代碼示例講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-06-06
  • mybatis-plus IdWorker生成的Id和返回給前臺的不一致的解決

    mybatis-plus IdWorker生成的Id和返回給前臺的不一致的解決

    這篇文章主要介紹了mybatis-plus IdWorker生成的Id和返回給前臺的不一致的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Java?Float?保留小數(shù)位精度的實(shí)現(xiàn)

    Java?Float?保留小數(shù)位精度的實(shí)現(xiàn)

    這篇文章主要介紹了Java?Float?保留小數(shù)位精度的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java中 String和StringBuffer的區(qū)別實(shí)例詳解

    java中 String和StringBuffer的區(qū)別實(shí)例詳解

    這篇文章主要介紹了java中 String和StringBuffer的區(qū)別實(shí)例詳解的相關(guān)資料,一個(gè)小的例子,來測試String和StringBuffer在時(shí)間和空間使用上的差別,需要的朋友可以參考下
    2017-04-04
  • 使用Java實(shí)現(xiàn)在Excel中添加動(dòng)態(tài)數(shù)組公式

    使用Java實(shí)現(xiàn)在Excel中添加動(dòng)態(tài)數(shù)組公式

    動(dòng)態(tài)數(shù)組公式是?Excel?引入的一項(xiàng)重要功能,它允許用戶從單個(gè)單元格中的公式返回多個(gè)結(jié)果值,并將這些值自動(dòng)填充到與公式單元格相鄰的單元格中,本文主要介紹了如何使用Java實(shí)現(xiàn)在Excel中添加動(dòng)態(tài)數(shù)組公式,x需要的可以參考下
    2023-12-12
  • eclipse構(gòu)建和發(fā)布maven項(xiàng)目的教程

    eclipse構(gòu)建和發(fā)布maven項(xiàng)目的教程

    這篇文章主要為大家詳細(xì)介紹了eclipse構(gòu)建和發(fā)布maven項(xiàng)目的教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • java Signleton模式詳解及示例代碼

    java Signleton模式詳解及示例代碼

    Singleton模式是創(chuàng)建模式。這種模式只涉及一個(gè)類是負(fù)責(zé)創(chuàng)建自己的對象。該類確保只有一個(gè)對象獲得創(chuàng)建。這個(gè)類提供了一種方法來訪問它的唯一對象
    2016-10-10
  • Springboot攔截filter中異常的處理

    Springboot攔截filter中異常的處理

    SpringBoot提供了全局異常處理機(jī)制可以攔截所有異常,包括Filter中的異常,本文主要介紹了Springboot攔截filter中異常的處理,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11

最新評論

丹东市| 玉树县| 博客| 吉木乃县| 瓦房店市| 长垣县| 馆陶县| 浮山县| 无棣县| 泾川县| 曲水县| 资源县| 墨竹工卡县| 武清区| 大荔县| 祁连县| 拉萨市| 维西| 东城区| 林芝县| 鄱阳县| 旅游| 乡城县| 东阳市| 玉溪市| 临江市| 河池市| 水城县| 罗源县| 甘孜县| 马边| 民勤县| 惠东县| 长顺县| 晋城| 绍兴县| 晋宁县| 邢台县| 滨海县| 宣化县| 无极县|