模板方法模式(TemplateMethod)(常用)

- 定義

  • 定義一個操作中的算法骨架,而將算法的一些步驟延遲到子類中,使得子類可以不改變該算法結(jié)構(gòu)的情況下重定義該算法的某些特定步驟。

- 使用場景

  • 算法的整體步驟很固定,但其中個別部分易變時,這時候可以使用模板方法模式,將容易變的部分抽象出來,供子類實現(xiàn)。
  • 當多個子類存在公共的行為時,可以將其提取出來并集中到一個公共父類中以避免代碼重復。首先,要識別現(xiàn)有代碼中的不同之處,并且將不同之處分離為新的操作。最后,用一個調(diào)用這些新的操作的模板方法來替換這些不同的代碼。
  • 當需要控制子類的擴展時,模板方法只在特定點調(diào)用鉤子操作,這樣就只允許在這些點進行擴展。

- 主要角色

(1) 抽象類(Abstract Class):負責給出一個算法的輪廓和骨架。它由一個模板方法和若干個基本方法構(gòu)成。這些方法的定義如下。

① 模板方法:定義了算法的骨架,按某種順序調(diào)用其包含的基本方法。

② 基本方法:是整個算法中的一個步驟,包含以下幾種類型。
抽象方法:在抽象類中申明,由具體子類實現(xiàn)。
具體方法:在抽象類中已經(jīng)實現(xiàn),在具體子類中可以繼承或重寫它。
鉤子方法:在抽象類中已經(jīng)實現(xiàn),包括用于判斷的邏輯方法和需要子類重寫的空方法兩種。

(2) 具體子類(Concrete Class):實現(xiàn)抽象類中所定義的抽象方法和鉤子方法,它們是一個頂級邏輯的一個組成步驟。

- 結(jié)構(gòu)圖

3-1Q116095405308.gif

- 代碼實現(xiàn)

public class TemplateMethodPattern
{
    public static void main(String[] args)
    {
        AbstractClass tm=new ConcreteClass();
        tm.TemplateMethod();
    }
}
//抽象類
abstract class AbstractClass
{
    public void TemplateMethod() //模板方法
    {
        SpecificMethod();
        abstractMethod1();          
         abstractMethod2();
    }  
    public void SpecificMethod() //具體方法
    {
        System.out.println("抽象類中的具體方法被調(diào)用...");
    }   
    public abstract void abstractMethod1(); //抽象方法1
    public abstract void abstractMethod2(); //抽象方法2
}
//具體子類
class ConcreteClass extends AbstractClass
{
    public void abstractMethod1()
    {
        System.out.println("抽象方法1的實現(xiàn)被調(diào)用...");
    }   
    public void abstractMethod2()
    {
        System.out.println("抽象方法2的實現(xiàn)被調(diào)用...");
    }
}
  • 模板方法定義了一個算法的步驟,并允許子類為一個或多個步驟提供實現(xiàn)。
  • 模板方法模式在一個方法中定義一個算法的骨架,而將一些步驟延遲到子類中,模板方法使得子類可以在不改變算法結(jié)構(gòu)的情況下,重新定義算法中的某些步驟。


    image.png
  • 鉤子是一種被聲明在抽象類中的方法,但只有空的或者默認的實現(xiàn)。鉤子的存在,可以讓子類有能力對算法的不同點進行掛鉤。要不要他掛鉤,由子類自行決定。


    image.png

    image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容