精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲人体av| 久久久久毛片| 91首页免费视频| 国产精品 欧美在线| 亚洲色图27p| 成人av综合网| 在线区一区二视频| 青草全福视在线| 水莓100在线视频| 免费看欧美美女黄的网站| 久久69精品久久久久久久电影好 | 久草在线视频网站| 久久亚洲二区三区| 亚洲www在线观看| 日韩毛片一区二区三区| 婷婷综合亚洲| 亚洲精品自拍第一页| 欧美视频国产视频| 午夜欧美巨大性欧美巨大| 亚洲欧美日韩电影| 欧美一区二区三区电影在线观看| 国产精品国产av| 国产农村妇女精品一区二区| 九九九久久国产免费| 欧美性受xxxx黑人| 日韩大胆成人| 日韩三级在线观看| 欧美三级午夜理伦三级富婆| 人人草在线视频| 亚洲综合无码一区二区| 亚洲午夜精品一区二区| 欧美日本韩国一区二区| 成人a区在线观看| 亚洲精品日韩av| 伊人网中文字幕| 鲁大师成人一区二区三区| 欧美风情在线观看| 国产午夜手机精彩视频| 波多野结衣一区| 精品视频在线播放| 午夜av免费看| 国产精品一线| 精品久久久久99| 午夜免费一级片| 成人在线观看免费视频| 91国在线观看| 久久久噜噜噜www成人网| 欧美性爽视频| 夜色激情一区二区| 永久免费网站视频在线观看| 黄色网在线看| 亚洲男人的天堂在线观看| 中文字幕99| 日本最新在线视频| 中文字幕不卡三区| 亚洲精品人成| 日本中文在线| 日本一区二区不卡视频| 亚洲一区二区高清视频| 在线观看免费黄视频| 国产精品国产成人国产三级| 亚洲免费视频一区| 日本在线观看视频| 国产精品二三区| 日韩不卡视频一区二区| 日本一级理论片在线大全| 亚洲一卡二卡三卡四卡五卡| 精品无码国产一区二区三区av| 国产精品蜜臀| 午夜精品一区二区三区三上悠亚| 黄色免费福利视频| 精品三区视频| 在线不卡欧美精品一区二区三区| 亚洲黄色片免费| 亚洲成人五区| 日韩成人av在线| 国产精品天天干| 91成人观看| 性色av香蕉一区二区| 伊人手机在线视频| 蜜桃视频在线观看一区| 成人在线观看av| 免费在线性爱视频| 专区另类欧美日韩| 少妇人妻大乳在线视频| 成人短视频app| 欧美精品1区2区3区| 久久黄色一级视频| 亚洲性视频大全| 久久国内精品一国内精品| 久久综合成人网| 三级影片在线观看欧美日韩一区二区| 国产精品一区久久久| 亚洲精品综合网| 久久久久国产精品人| 警花观音坐莲激情销魂小说 | 欧美在线影院在线视频| 中文在线a天堂| 岛国精品在线播放| 神马影院我不卡| 在线heyzo| 在线精品视频免费播放| 男人的天堂免费| 视频福利一区| 久久6精品影院| 丁香社区五月天| 国产成都精品91一区二区三| 日韩av一级大片| 不卡av免费观看| 欧美精品精品一区| 性色av蜜臀av色欲av| 欧美在线黄色| 国产精品免费一区| 欧美日韩伦理片| 亚洲成人动漫av| 亚洲一级片av| 欧美日韩国产高清电影| 国内精品久久久久久久| 国产精品国产一区二区三区四区| 97久久人人超碰| 亚洲国产一二三精品无码| 色综合一本到久久亚洲91| 亚洲丁香婷深爱综合| 99久久婷婷国产综合| 青青草国产成人99久久| 欧美激情视频一区二区三区| 黄色影院在线看| 欧美肥胖老妇做爰| 美国美女黄色片| 老牛嫩草一区二区三区日本| 好看的日韩精品视频在线| 尤物视频在线看| 91麻豆精品久久久久蜜臀| av在线播放中文字幕| 爽爽淫人综合网网站| 精品欧美国产一区二区三区不卡| 国产视频中文字幕在线观看| 欧美日韩国产首页在线观看| 中字幕一区二区三区乱码| 老鸭窝91久久精品色噜噜导演| 精品国产_亚洲人成在线| 色呦呦在线观看视频| 欧美一区二区视频观看视频| 日韩一卡二卡在线观看| 美女视频一区在线观看| 一区二区三区四区欧美| 激情欧美一区二区三区黑长吊| 一本色道久久综合狠狠躁篇怎么玩 | 国产精品三级| 国产精品吹潮在线观看| 超碰免费97在线观看| 欧美中文字幕一区二区三区亚洲| 巨胸大乳www视频免费观看| 国产模特精品视频久久久久| 欧美极品一区| 3d性欧美动漫精品xxxx软件| 国产一区二区三区在线视频| 欧美激情一区二区三区免费观看| 国产午夜一区二区三区| 黄色三级视频片| 日韩成人a**站| 91精品久久久久久久久久另类 | 一级黄色在线播放| 91九色精品国产一区二区| 91在线视频导航| 影音先锋男人在线资源| 亚洲精品999| 亚洲s码欧洲m码国产av| 欧美激情综合五月色丁香小说| 亚洲色图久久久| 久久久久久久久久久久久久| 99国产视频| 亚洲欧美韩国| 丝袜美腿亚洲一区二区| 精品人妻久久久久一区二区三区| 亚洲一区中文日韩| 成年人网站免费看| 蜜桃视频一区二区三区| 日韩亚洲欧美一区二区| 亚洲精品一级二级三级| 91精品国产综合久久香蕉| 图片区小说区亚洲| 亚洲美女久久久| 91肉色超薄丝袜脚交一区二区| 亚洲久本草在线中文字幕| 国产艳俗歌舞表演hd| 美腿丝袜亚洲三区| 欧美日韩不卡在线视频| av永久不卡| www.久久草| 美女网站视频一区| 精品中文字幕视频| 久久av少妇| 欧美va亚洲va香蕉在线| 波多野结衣视频在线看| 一级特黄大欧美久久久| av男人的天堂av| 成人在线视频一区二区| 欧美黄色性生活| 亚洲精品麻豆| 在线电影看在线一区二区三区| 精品欠久久久中文字幕加勒比| 国产精品久久久久久久美男| 欧美v亚洲v| 日韩有码在线视频| 欧美人体大胆444www| 精品女同一区二区| 夜夜爽8888| 丁香五六月婷婷久久激情| 免费三级在线观看| 国产片一区二区| 色综合久久五月| 国产成人午夜高潮毛片| 日韩精品你懂的| 国产美女诱惑一区二区| 激情小视频网站| 亚洲国产日韩欧美在线| 色综合久久久久久久久五月| 韩国精品福利一区二区三区| 91探花福利精品国产自产在线| 中文字幕资源网在线观看免费 | 国产亚洲欧美日韩精品一区二区三区 | 都市激情亚洲一区| 欧美国产日本高清在线 | 黄色片一区二区三区| 欧美日韩激情在线| 免费精品一区二区| 黑人狂躁日本妞一区二区三区 | 色综合久久久久| 91精品国产高潮对白| 亚洲人成网站在线| 欧美福利在线视频| 亚洲国产精品成人综合色在线婷婷 | 成人午夜私人影院| xxxx国产视频| 国产麻豆精品theporn| 少妇网站在线观看| 免费在线一区观看| 国产理论在线播放| 日韩国产高清影视| 日本999视频| 日日夜夜精品免费视频| 黑鬼大战白妞高潮喷白浆| 午夜在线精品| 91av资源网| 性感少妇一区| 免费午夜视频在线观看| 久久久久久黄| 成人一区二区三| 日韩国产精品91| 在线观看国产一级片| 免播放器亚洲一区| 国产永久免费网站| 国产一区二区三区蝌蚪| 亚洲成人av免费观看| 国产成人丝袜美腿| 国产黑丝一区二区| 91视频www| 黄色av免费播放| 亚洲欧洲在线观看av| 校园春色 亚洲| 亚洲图片欧美综合| 久久国产视频播放| 欧美午夜片在线观看| 一二区在线观看| 日韩欧美资源站| 日本美女一级视频| 亚洲免费精彩视频| 在线视频91p| 欧美成人剧情片在线观看| 久久av色综合| 日韩av电影国产| 日韩第二十一页| 国产精品二区二区三区| 日韩精品免费一区二区三区竹菊 | 天天做天天爱综合| 999久久欧美人妻一区二区| 最新成人av网站| 精品久久久噜噜噜噜久久图片| 久久99国内精品| 国产精品成人无码专区| 国产午夜精品久久| 无码人妻精品一区二区三区夜夜嗨| 亚洲国产一区二区视频| 波多野结衣绝顶大高潮| 欧美白人最猛性xxxxx69交| 欧美孕妇性xxxⅹ精品hd| 在线精品国产成人综合| 成人av福利| 日韩免费av在线| 另类视频一区二区三区| 久久青青草原一区二区| 国产精品久久观看| 久久久999免费视频| 久久er99精品| 噜噜噜在线视频| 亚洲另类一区二区| 日日夜夜操视频| 精品黑人一区二区三区久久| 黄色在线网站| 欧美精品激情在线| 91精品福利观看| 麻豆精品视频| 欧美1区3d| 日韩av片网站| 99re这里只有精品首页| 日韩精品123区| 91电影在线观看| 女人18毛片水真多18精品| 日韩中文在线中文网在线观看| 草草视频在线| 91嫩草在线视频| 欧美日韩色图| 狠狠97人人婷婷五月| 国产二区国产一区在线观看| 丁香花五月婷婷| 精品欧美激情精品一区| 亚洲爱爱综合网| 久久韩国免费视频| 久久av日韩| 欧洲亚洲一区二区| 亚洲一区二区三区四区五区午夜| 人妻换人妻仑乱| 中文字幕中文字幕在线一区| 在线观看免费av片| 亚洲福利视频在线| 日韩激情美女| 91手机视频在线观看| 日韩av片子| 9久久婷婷国产综合精品性色| 93久久精品日日躁夜夜躁欧美| 免费在线观看av网址| 在线91免费看| 老司机午夜在线| 国产女同一区二区| 久久裸体网站| 一级在线免费视频| 国产日产欧美一区二区三区| 欧美在线观看不卡| 精品视频久久久久久久| 韩日精品一区二区| 欧美日韩国产免费一区二区三区| 在线亚洲免费| 国产黄色三级网站| 欧美日韩在线免费观看| 色视频在线看| 日韩av第一页| 日韩理论在线| 爱豆国产剧免费观看大全剧苏畅| 中文字幕永久在线不卡| 国产又粗又大又黄| 久久手机免费视频| 日韩高清一区| 每日在线观看av| 91毛片在线观看| 中文文字幕一区二区三三| 中文字幕日韩av电影| 国产激情综合| 免费看欧美黑人毛片| 97超碰欧美中文字幕| 无码视频在线观看| 日韩在线视频播放| 精品一区二区三区免费看| 无码人妻精品一区二区蜜桃网站| 懂色av一区二区在线播放| 色婷婷av国产精品| 在线观看精品自拍私拍| 四虎精品一区二区免费| 日韩欧美在线播放| 日韩欧美一二三| 999在线免费视频| 美女久久久精品| 一本在线免费视频| 欧美一区二区三区在线观看| av色综合久久天堂av色综合在| 97操在线视频| 亚洲精品乱码| 日本一道本视频| 337p亚洲精品色噜噜噜| 美女航空一级毛片在线播放| 久久国产精品 国产精品| 日日夜夜免费精品| caoporn91| 亚洲国产精品va| 在线一区视频观看| 菠萝蜜视频在线观看入口| 99re亚洲国产精品| 亚洲图片小说视频| 久久久综合av| 欧美久久精品一级c片| 男人操女人下面视频| 色偷偷88欧美精品久久久| 毛片在线播放a| 精品一区二区久久久久久久网站| 蜜臀av一区二区在线免费观看| 精品97人妻无码中文永久在线| 精品亚洲永久免费精品| 在线视频成人| 777米奇影视第四色| 成人免费在线视频|