精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一文搞懂設計模式—模板方法模式

開發 前端
模板方法是一種簡單但非常實用的設計模式,它通過定義一個算法的框架,并將具體實現延遲到子類中,實現了代碼復用和擴展的目的。在具體實現步驟相對固定、但又存在差異性的情況下,模板方法模式能夠很好地解決代碼重復和維護難度的問題。

模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern),是一種行為設計模式,它定義了一個操作中的算法框架,將某些步驟的具體實現留給子類。通過模板方法模式,我們可以在不改變算法結構的情況下,允許子類重新定義某些步驟,從而實現代碼復用和擴展。

在軟件開發中,我們經常會遇到需要定義一組相似操作的場景。這些操作可能在整體上有著相同的結構,但在細節上有所差異。如果每次都重復編寫這些操作的通用結構,會導致代碼的冗余性,同時也增加了后期維護的難度。為了解決這個問題,模板方法模式應運而生。

使用場景

模板方法模式適用于以下場景:

  • 當存在一組相似的操作,它們具有相同的算法結構,但實現細節各不相同時。
  • 當希望在不改變算法的整體結構的情況下,允許子類自由擴展或修改某些步驟時。
  • 當希望將算法的實現細節封裝起來,只暴露出高層接口供調用者使用時。

JUC 下的 AQS 就使用到了模板方法模式,其中 acquire() 是模板方法。tryAcquire() 方法的具體實現去交給子類完成。

/**
     * Acquires in exclusive mode, ignoring interrupts.  Implemented
     * by invoking at least once {@link #tryAcquire},
     * returning on success.  Otherwise the thread is queued, possibly
     * repeatedly blocking and unblocking, invoking {@link
     * #tryAcquire} until success.  This method can be used
     * to implement method {@link Lock#lock}.
     *
     * @param arg the acquire argument.  This value is conveyed to
     *        {@link #tryAcquire} but is otherwise uninterpreted and
     *        can represent anything you like.
     */
    public final void acquire(int arg) {
        if (!tryAcquire(arg) &&
            acquireQueued(addWaiter(Node.EXCLUSIVE), arg))
            selfInterrupt();
    }

    protected boolean tryAcquire(int arg) {
        throw new UnsupportedOperationException();
    }

實現方式

結構說明

模板方法模式由抽象類和具體子類組成。抽象類定義了算法的框架,其中包含了一個或多個抽象方法,用于由具體子類實現。具體子類繼承抽象類,并根據需要重寫其中的抽象方法,從而實現具體的細節。

在模板方法模式中,通常涉及以下幾個角色:

  • 抽象類(Abstract Class):抽象類定義了算法的框架,包括一個或多個抽象方法和具體方法。其中的抽象方法由子類實現,具體方法可以被子類直接繼承或重寫。
  • 具體子類(Concrete Subclass):具體子類繼承抽象類,并根據需要實現其中的抽象方法。具體子類提供了算法的具體實現細節。

示例代碼

以下是一個簡單的代碼示例:

// 抽象類,定義模板方法和抽象步驟方法
public abstract class AbstractClass {
    // 模板方法,定義算法的整體結構
    public final void templateMethod() {
        step1();
        step2();
        step3();
    }
     // 模板公共方法
    protected final void step1(){
      System.out.println("ConcreteClass: Step 1");
    }
    // 抽象步驟方法,由子類實現具體的步驟邏輯
    protected abstract void step2();
    // 抽象步驟方法,由子類實現具體的步驟邏輯
    protected abstract void step3();
}

// 具體子類,實現抽象步驟方法
public class ConcreteClass extends AbstractClass {
    
    protected void step2() {
        System.out.println("ConcreteClass: Step 2");
    }

    protected void step3() {
        System.out.println("ConcreteClass: Step 3");
    }
}

// 客戶端代碼
public class Client {
    public static void main(String[] args) {
        AbstractClass abstractClass = new ConcreteClass();
        abstractClass.templateMethod();
    }
}

在上述代碼中,我們首先定義了一個抽象類 AbstractClass,其中包含了模板方法和抽象方法。然后,我們創建了具體子類 ConcreteClass,根據需要實現了抽象方法。

在客戶端代碼 Client 中,我們創建了具體子類的對象,并調用了模板方法 templateMethod(),從而執行了定義好的算法。

運行該代碼將輸出以下結果:

ConcreteClass: Step 1
ConcreteClass: Step 2
ConcreteClass: Step 3

注意:

  • 一般模板方法都加上 final 關鍵字, 防止子類重寫模板方法。
  • 抽象模板中的基本方法盡量設計為 protected 類型,符合迪米特法則,不需要暴露的屬性或方法盡量不要設置為 protected 類型。實現類若非必要,盡量不要擴大父類中的訪問權限。

鉤子方法

鉤子方法(Hook Method)是模板方法模式中的一種特殊方法,用于在抽象類中提供一個默認的實現,但允許具體子類選擇性地進行重寫或擴展。鉤子方法允許子類在不改變算法骨架的情況下,對算法的某些步驟進行定制。

以下是一個包含鉤子方法的 Java 示例代碼:

// 抽象類,定義模板方法和鉤子方法
public abstract class AbstractClass {
    // 模板方法,定義算法的整體結構
    public final void templateMethod() {
        step1();
        step2();
    // 鉤子方法的調用
        if (hookMethod()) {  
            step3();
        }
    }

    protected abstract void step1();

    protected abstract void step2();

    // 鉤子方法,默認返回true,子類可以選擇性地重寫
    protected boolean hookMethod() {
        return true;
    }

    protected abstract void step3();
}

// 具體子類1
public class ConcreteClass1 extends AbstractClass {
    protected void step1() {
        System.out.println("ConcreteClass1: Step 1");
    }

    protected void step2() {
        System.out.println("ConcreteClass1: Step 2");
    }

    protected void step3() {
        System.out.println("ConcreteClass1: Step 3");
    }
}

// 具體子類2
public class ConcreteClass2 extends AbstractClass {
    protected void step1() {
        System.out.println("ConcreteClass2: Step 1");
    }

    protected void step2() {
        System.out.println("ConcreteClass2: Step 2");
    }

    protected boolean hookMethod() {
        return false; // 重寫鉤子方法,返回false
    }

    protected void step3() {
        System.out.println("ConcreteClass2: Step 3");
    }
}

// 客戶端代碼
public class Client {
    public static void main(String[] args) {
        AbstractClass class1 = new ConcreteClass1();
        class1.templateMethod();

        System.out.println("------------------");

        AbstractClass class2 = new ConcreteClass2();
        class2.templateMethod();
    }
}

在上述代碼中,我們定義了一個抽象類 AbstractClass,其中包含模板方法 templateMethod() 和鉤子方法 hookMethod()。在模板方法中,我們先執行了step1() 和 step2() 兩個基本操作方法,然后通過調用鉤子方法決定是否執行 step3()。

具體子類 ConcreteClass1 和 ConcreteClass2 繼承了抽象類,并實現了基本操作方法 step1()、step2() 和鉤子方法 hookMethod()、step3()。

在客戶端代碼 Client 中,我們分別創建了具體子類的對象,并調用其模板方法,從而執行了定義好的算法。

運行該示例代碼將輸出以下結果:

ConcreteClass1: Step 1
ConcreteClass1: Step 2
ConcreteClass1: Step 3
------------------
ConcreteClass2: Step 1
ConcreteClass2: Step 2

通過重寫鉤子方法,具體子類可以選擇性地對算法進行定制化。這就展示了鉤子方法在模板方法模式中的應用。

優缺點

優點

  • 代碼復用:模板方法模式通過將算法的通用結構定義在抽象類中,可以使子類直接繼承這些通用部分,從而達到代碼復用的目的。
  • 擴展性:模板方法模式允許子類根據需要重寫父類的某些步驟,從而實現對算法的自由擴展和修改,同時保持整體結構的穩定性。
  • 封裝性:模板方法模式將算法的實現細節封裝在抽象類中,對調用者屏蔽了具體的實現細節,只暴露出高層接口。

缺點

  • 模板方法模式將算法的執行流程固定在抽象類中,可能會導致代碼的可讀性降低,增加理解和維護的難度。
  • 模板方法中的步驟越多, 其維護工作就可能會越困難。
  • 通過子類抑制默認步驟實現可能會導致違反里氏替換原則。

總結

模板方法是一種簡單但非常實用的設計模式,它通過定義一個算法的框架,并將具體實現延遲到子類中,實現了代碼復用和擴展的目的。在具體實現步驟相對固定、但又存在差異性的情況下,模板方法模式能夠很好地解決代碼重復和維護難度的問題。

責任編輯:武曉燕 來源: Java隨想錄
相關推薦

2024-02-20 12:09:32

模式工廠方法接口

2024-01-29 12:22:07

設計模式策略模式

2024-02-19 13:11:38

門面模式系統

2024-02-26 11:52:38

代理模式設計

2024-02-27 11:59:12

享元模式對象

2024-02-04 12:04:17

2023-05-22 13:27:17

2024-02-23 12:11:53

裝飾器模式對象

2024-01-30 13:15:00

設計模式責任鏈

2024-02-22 12:13:49

適配器模式代碼

2024-02-18 12:36:09

2022-05-05 16:47:24

Docker網絡空間容器

2022-09-21 16:56:16

設計模式微服務架構

2023-12-12 11:09:55

模板方法模式python設計模式

2013-11-26 17:15:13

Android設計模式

2012-07-11 08:51:51

設計模式

2024-04-12 12:19:08

語言模型AI

2022-03-24 08:51:48

Redis互聯網NoSQL

2020-11-17 09:32:57

設計模式責任鏈

2020-11-10 09:20:40

開發模式代碼
點贊
收藏

51CTO技術棧公眾號

91精品国产闺蜜国产在线闺蜜| 男人天堂手机在线视频| 中文字幕视频一区二区| 97精品在线| 欧美一区二区精品| 福利视频一区二区三区四区| 韩国福利在线| 久久成人精品无人区| 九九九久久国产免费| 欧美黑人欧美精品刺激| 成人免费黄色| 亚洲国产综合91精品麻豆| 欧美一区二区三区在线播放| 国产模特av私拍大尺度| 好吊日精品视频| av电影在线播放高清免费观看| 久久婷婷久久| 欧美成年人视频网站| 久久国产精品无码一级毛片| 亚洲精品66| 欧美日韩在线免费| 中国女人做爰视频| 九色视频在线观看免费播放| 国产成人精品三级麻豆| 国产成人精品视频在线观看| 在线看成人av| 91tv官网精品成人亚洲| 亚洲少妇激情视频| 一个人看的视频www| 欧美专区福利免费| 亚洲一区成人在线| 在线观看视频黄色| melody高清在线观看| 99精品桃花视频在线观看| 92看片淫黄大片看国产片| 中文字幕免费视频观看| 国产精品综合色区在线观看| 欧美激情第6页| 美女福利视频在线观看| 欧美h版在线| 亚洲亚裔videos黑人hd| 亚洲国产欧美视频| 国产无遮挡裸体免费久久| 日韩午夜av一区| 激情在线观看视频| 激情久久99| 欧美在线一二三| 久久国产乱子伦免费精品| xxx性欧美| 亚洲一二三区不卡| 久久亚洲国产成人精品无码区 | 欧美精品在线观看一区二区| aaaaaa亚洲| 粉嫩一区二区| 欧美午夜片在线免费观看| 欧美 丝袜 自拍 制服 另类| www.九色在线| 黄色一区二区三区| 5月婷婷6月丁香| 中文不卡1区2区3区| 欧美日韩国产丝袜另类| 久久久999视频| 亚洲性受xxx喷奶水| 色综合久久99| 亚洲一区在线不卡| 伊人久久大香伊蕉在人线观看热v 伊人久久大香线蕉综合影院首页 伊人久久大香 | 欧美日韩国产色综合一二三四| 久久精品视频在线播放| 在线视频第一页| 97精品在线| 久久99精品视频一区97| 永久免费看mv网站入口亚洲| 国产一区二区免费电影| 亚洲精品国产精品国| 国产成人精品www牛牛影视| 99久久国产免费免费| 欧美 日韩 国产 在线| 成人av网址在线| 乱色588欧美| 国产高清视频在线观看| 中文字幕在线一区免费| 神马午夜伦理影院| 成人一级福利| 欧美制服丝袜第一页| 午夜福利123| 粉嫩久久久久久久极品| 亚洲天堂av女优| 潘金莲一级黄色片| 亚洲香蕉网站| 国产精品成人v| 国产免费无遮挡| av一区二区三区在线| 日韩精品久久一区二区三区| 黄页视频在线播放| 五月综合激情网| 污视频网站观看| 亚洲精品国产一区黑色丝袜| 日韩一区二区三区精品| 日韩av在线导航| 任你操精品视频| 在线日韩电影| 国产精品香蕉av| 日本精品一二区| 国产精品美女久久久久久久久久久 | 日韩一区二区久久久| 国产精品二区一区二区aⅴ| 免费高清在线一区| 国产精品一级久久久| yourporn在线观看视频| 亚洲国产一二三| 无尽裸体动漫2d在线观看| 欧美天堂社区| 久久国产精品99国产精| 国产伦精品一区二区三区视频我| 国产一区二三区好的| 欧美自拍资源在线| av免费观看大全| 中老年在线免费视频| 欧美一区二区黄色| 99久久99久久精品免费| 国产农村妇女精品一二区| 5g影院天天爽成人免费下载| 国产小视频在线播放| 夜夜嗨av一区二区三区四季av| 久久久久免费精品| 青青视频一区二区| 欧美激情按摩在线| 精品国产18久久久久久| 国产欧美一区二区三区沐欲| 春日野结衣av| 国产精品一区二区三区美女| 日韩在线视频网站| 少妇一级淫片日本| www亚洲一区| 男人插女人视频在线观看| 蜜桃av在线播放| 欧美精品aⅴ在线视频| 六月婷婷七月丁香| 国产亚洲精品v| 国产一区二区三区无遮挡| 日韩激情美女| 日韩一区二区视频| 国产又黄又爽又无遮挡| 国产一区中文字幕| 中文字幕中文字幕在线中心一区| 成人看片网页| 一区二区成人精品| 99re国产在线| 久久五月婷婷丁香社区| 国产日产欧美视频| 少妇高潮一区二区三区| 91av国产在线| 天堂影院在线| 色嗨嗨av一区二区三区| 麻豆av免费观看| 久热精品视频| 色爱区成人综合网| 日韩国产大片| 久久久精品久久久久| 99国产精品久久久久99打野战| 亚洲色图在线看| www.偷拍.com| 国产精品av久久久久久麻豆网| 懂色一区二区三区av片| h视频在线观看免费| 欧美日本一道本在线视频| 精品一区二区在线观看视频| 国内不卡的二区三区中文字幕| 亚洲欧美一二三| 少妇精品在线| 浅井舞香一区二区| 成人精品一区二区三区免费 | 久久久免费观看| 亚洲av成人精品毛片| 色综合色狠狠天天综合色| 三区四区在线观看| 国产尤物一区二区在线| 国产主播自拍av| 国产亚洲一区二区三区啪| 国产精品爽爽爽爽爽爽在线观看| 日本www在线观看视频| 日韩一区二区三区电影在线观看| 日韩精品成人在线| 国产校园另类小说区| 在线观看国产福利| 亚洲日本激情| 亚洲精品一区二区三区av| 91精品国产乱码久久久竹菊| 日本一本a高清免费不卡| 免费黄色网址在线观看| 精品国产一区二区三区久久久蜜月| 国产精品xxxx喷水欧美| 国产精品毛片a∨一区二区三区| 波多野结衣中文字幕在线播放| 国产一区二区三区成人欧美日韩在线观看| 欧美中日韩一区二区三区| 久久一级大片| 热久久免费国产视频| 成人高清免费在线| 亚洲精品视频中文字幕| 国产精品人妻一区二区三区| 精品福利在线视频| 性生交大片免费全黄| 2024国产精品| 曰本三级日本三级日本三级| 爽爽淫人综合网网站| 国产美女主播在线| 日韩一区自拍| 欧美成人免费在线| 亚洲天堂中文字幕在线观看| 国产成人免费av| 波多野在线观看| 美女久久久久久久久久久| 成年在线观看免费人视频| 欧美精品一区二区三区在线| 在线观看色网站| 欧美视频中文在线看| 久草视频中文在线| 中文字幕亚洲精品在线观看| av鲁丝一区鲁丝二区鲁丝三区| 国产一区二区在线观看视频| 欧美特级aaa| 久久激情婷婷| 国产精品无码人妻一区二区在线| 在线中文字幕亚洲| 亚洲高清精品中出| 国产成人精品一区二区免费看京 | 丰满熟妇乱又伦| 制服丝袜亚洲精品中文字幕| 最近中文在线观看| 91国内精品野花午夜精品| 日本午夜小视频| 亚洲一区二区三区中文字幕在线| 久久人妻无码aⅴ毛片a片app| 久久久久久久av麻豆果冻| 男男做爰猛烈叫床爽爽小说| 国产69精品久久99不卡| 黑人无套内谢中国美女| 狠狠色狠狠色综合系列| 中文av字幕在线观看| 日本少妇一区二区| 久草在在线视频| 老司机一区二区三区| 国产91在线视频观看| 99国产精品| 5月婷婷6月丁香| 久久不射网站| 激情六月丁香婷婷| 久久大逼视频| 欧美伦理视频在线观看| 日日摸夜夜添夜夜添亚洲女人| 乱子伦视频在线看| 久久婷婷av| 久久这里只精品| 久久se精品一区精品二区| 777一区二区| 国产原创一区二区三区| 精品人妻二区中文字幕| www.在线欧美| 免费人成又黄又爽又色| 国产精品久久久久影院色老大| 成人信息集中地| 亚洲天堂网中文字| 久久久精品国产sm调教| 亚洲成人动漫av| av大片在线免费观看| 色婷婷综合久久久中文一区二区| 久久影视中文字幕| 欧美日韩精品一区二区三区四区| 国产又粗又猛又黄又爽| 日韩一区二区不卡| 四虎成人免费在线| 中文字幕亚洲欧美一区二区三区 | 精品亚洲一区二区三区四区| 久久99蜜桃精品| 中文字幕乱码在线人视频| 国产成人精品免费视频网站| 欧美成人三级伦在线观看| 国产亚洲欧美在线| 国产少妇在线观看| 亚洲国产你懂的| 秋霞av一区二区三区| 91精品国产入口在线| 成人午夜福利视频| 在线看国产精品| 在线免费观看污| 欧美在线精品免播放器视频| 国产成人a视频高清在线观看| 亚洲伊人第一页| 蜜臀av免费一区二区三区| 一区二区三区四区不卡| 亚洲性感美女99在线| 亚洲一区二区三区四区五区xx| 国产精品一区不卡| 一区二区黄色片| 亚洲九九爱视频| www.久久视频| 精品第一国产综合精品aⅴ| 成在在线免费视频| 国产69精品久久久久99| 国产第一亚洲| 久久青青草原一区二区| 亚洲欧美一级二级三级| 韩国日本美国免费毛片| 成人精品一区二区三区中文字幕| 无码人妻精品一区二区三应用大全| 国产精品无圣光一区二区| 福利一区二区三区四区| 6080午夜不卡| 邻居大乳一区二区三区| 欧美精品videosex性欧美| 国产精品伊人| 欧美精品二区三区四区免费看视频| 欧美三区不卡| xxww在线观看| 久久九九全国免费| 日本特黄一级片| 日韩精品中文字幕一区二区三区| fc2在线中文字幕| 欧洲精品久久久| 国产66精品| 精品人妻人人做人人爽| 另类小说综合欧美亚洲| 三上悠亚影音先锋| 性久久久久久久久久久久| 精品国产av 无码一区二区三区| 亚洲欧洲日产国码av系列天堂| 136福利第一导航国产在线| 97人人香蕉| 欧美黄色一区二区| 爱情岛论坛亚洲自拍| 中文字幕亚洲不卡| 91精品国产乱码久久久| 中文字幕亚洲综合久久| 日韩久久一区二区三区| 欧美一区二区三区四区在线观看地址| 99视频精品| 国产激情视频网站| 亚洲成人久久影院| 午夜成人免费影院| 97成人在线视频| 欧美黄色影院| 国产极品尤物在线| 91香蕉视频污在线| 国产一级做a爱片久久毛片a| 亚洲国产精品人久久电影| 9999在线视频| 国内精品视频免费| 一本一本久久| 全黄一级裸体片| 在线视频一区二区免费| 精品三级久久久久久久电影聊斋| 91福利视频网| 成人vr资源| 一本一道久久a久久综合蜜桃| 亚洲欧洲日韩av| 国产伦精品一区二区三区视频痴汉| 在线丨暗呦小u女国产精品| 草莓视频成人appios| 国产福利片一区二区| 国产一区二区h| 国产亚洲欧美精品久久久www | 国产在线999| 艳女tv在线观看国产一区| 精品无码av一区二区三区不卡| 亚洲午夜久久久久| 天堂а√在线8种子蜜桃视频 | av中文字幕播放| 国内精久久久久久久久久人| 妖精视频一区二区三区免费观看| 日韩一级在线免费观看| 1区2区3区国产精品| 亚洲av永久纯肉无码精品动漫| 97在线精品视频| 国产成人调教视频在线观看| mm131亚洲精品| 夜夜精品视频一区二区| 青春草在线观看| 国产深夜精品福利| 亚洲无吗在线| 美国黑人一级大黄| 欧美zozozo| 免费电影日韩网站| 成人午夜免费剧场| 91亚洲大成网污www| 一级黄色片网站| 欧美精品激情blacked18| 久久av电影| 亚洲天堂av一区二区三区| 欧美丝袜美女中出在线| 日本三级在线播放完整版| 国产欧美一区二区在线播放| 蜜桃视频免费观看一区| 国产小视频在线看| 中文字幕日韩av综合精品| 4438全国亚洲精品观看视频| 草草草在线视频| 亚洲成av人综合在线观看| 3d成人动漫在线| 国产综合第一页|