更新時間:2023-09-14 來源:黑馬程序員 瀏覽量:
模板方法模式(Template Method Pattern)是一種行為設(shè)計模式,它屬于Gang of Four(GoF)設(shè)計模式之一。這個模式的核心思想是定義一個算法的骨架,將算法的具體步驟延遲到子類中實現(xiàn),以允許子類在不改變算法結(jié)構(gòu)的情況下重定義算法的某些步驟。模板方法模式通過提供一個模板(或者說是抽象基類)來封裝算法,以確保算法的結(jié)構(gòu)一致性,同時允許不同的子類提供不同的實現(xiàn)。
以下是模板方法模式的關(guān)鍵要素和示例說明:
抽象類定義了算法的骨架,它包含一個或多個抽象方法,這些方法代表算法中的步驟,但不提供具體的實現(xiàn)。
public abstract class AbstractClass { public void templateMethod() { step1(); step2(); step3(); } protected abstract void step1(); protected abstract void step2(); protected abstract void step3(); }
具體子類繼承抽象類并實現(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)方式 } }
模板方法是抽象類中定義的方法,它按照特定的順序調(diào)用算法步驟,這個順序是固定的,但具體步驟的實現(xiàn)可以在子類中變化。
在抽象類中,可以包含一些可選的鉤子方法,這些方法在模板方法中可以有默認(rèn)實現(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(); // 鉤子方法,默認(rèn)實現(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)。這提供了一種靈活的方式來處理算法的變化和擴展。