首頁常見問題正文

什么是模板方法模式?_java設(shè)計模式基礎(chǔ)

更新時間:2023-09-14 來源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

  模板方法模式(Template Method Pattern)是一種行為設(shè)計模式,它屬于Gang of Four(GoF)設(shè)計模式之一。這個模式的核心思想是定義一個算法的骨架,將算法的具體步驟延遲到子類中實現(xiàn),以允許子類在不改變算法結(jié)構(gòu)的情況下重定義算法的某些步驟。模板方法模式通過提供一個模板(或者說是抽象基類)來封裝算法,以確保算法的結(jié)構(gòu)一致性,同時允許不同的子類提供不同的實現(xiàn)。

  以下是模板方法模式的關(guān)鍵要素和示例說明:

  1.抽象類(Abstract Class):

  抽象類定義了算法的骨架,它包含一個或多個抽象方法,這些方法代表算法中的步驟,但不提供具體的實現(xiàn)。

public abstract class AbstractClass {
    public void templateMethod() {
        step1();
        step2();
        step3();
    }

    protected abstract void step1();
    protected abstract void step2();
    protected abstract void step3();
}

  2.具體子類(Concrete Subclasses):

  具體子類繼承抽象類并實現(xiàn)抽象方法,從而提供算法步驟的具體實現(xiàn)。

public class ConcreteClassA extends AbstractClass {
    @Override
    protected void step1() {
        // 具體實現(xiàn)步驟1的邏輯
    }

    @Override
    protected void step2() {
        // 具體實現(xiàn)步驟2的邏輯
    }

    @Override
    protected void step3() {
        // 具體實現(xiàn)步驟3的邏輯
    }
}

public class ConcreteClassB extends AbstractClass {
    @Override
    protected void step1() {
        // 不同的實現(xiàn)方式
    }

    @Override
    protected void step2() {
        // 不同的實現(xiàn)方式
    }

    @Override
    protected void step3() {
        // 不同的實現(xiàn)方式
    }
}

  3.模板方法(Template Method):

  模板方法是抽象類中定義的方法,它按照特定的順序調(diào)用算法步驟,這個順序是固定的,但具體步驟的實現(xiàn)可以在子類中變化。

1694654537543_模板方法模式.jpg

  4.鉤子方法(Hook Methods):

  在抽象類中,可以包含一些可選的鉤子方法,這些方法在模板方法中可以有默認實現(xiàn),但子類可以選擇性地覆蓋它們以改變算法的行為。

public abstract class AbstractClass {
    // 模板方法
    public void templateMethod() {
        step1();
        step2();
        if (hook()) { // 鉤子方法
            step3();
        }
    }

    protected abstract void step1();
    protected abstract void step2();
    protected abstract void step3();

    // 鉤子方法,默認實現(xiàn)返回true
    protected boolean hook() {
        return true;
    }
}

  使用模板方法模式的好處包括:

  ·代碼重用:模板方法將共同的行為放在抽象類中,可以在多個子類中共享。

  ·算法結(jié)構(gòu)固定性:確保算法的基本結(jié)構(gòu)不會改變,只是具體步驟的實現(xiàn)會變化。

  ·擴展性:子類可以輕松地擴展或修改算法的特定步驟,而無需改變整體算法結(jié)構(gòu)。

  模板方法模式在Java中廣泛用于創(chuàng)建具有相似結(jié)構(gòu)但不同行為的類,例如,各種排序算法可以使用模板方法模式來實現(xiàn),其中排序的比較和交換步驟在不同的子類中實現(xiàn)。這提供了一種靈活的方式來處理算法的變化和擴展。

分享到:
在線咨詢 我要報名
和我們在線交談!