設(shè)計(jì)模式[14]-模版方法模式-Template Method Pattern

1.模版方法模式簡(jiǎn)介

模版方法模式(Template Method Pattern)是行為型(Behavioral)設(shè)計(jì)模式,使用了Java的繼承機(jī)制,在抽象類里定義了模版方法,該模版方法調(diào)用了若干抽象方法(子類實(shí)現(xiàn))或具體方法(子類可覆蓋);并迫使子類實(shí)現(xiàn)抽象方法,從而實(shí)現(xiàn)其余的邏輯。

模版方法的用意在于,把相同的部分放在抽象基類中實(shí)現(xiàn),把變化的部分延遲到子類中實(shí)現(xiàn),不同的子類可以以不同的方式實(shí)現(xiàn)抽象方法,達(dá)到代碼復(fù)用的目的。

模版方法模式一共有兩種角色:

  • AbstractClass(抽象類): 抽象類里定義了模版方法,模版方法定義了算法的框架(步驟),包括一系列基本操作;這些基本操作可以是抽象的(由子類實(shí)現(xiàn)),也可以是具體的。

  • ConcreteClass(具體子類): 是抽象類的子類,用于實(shí)現(xiàn)在父類中聲明的抽象基本操作,也可以覆蓋父類中已經(jīng)實(shí)現(xiàn)的具體基本操作。

2. 模版方法模式舉例

當(dāng)使用JDBC操作數(shù)據(jù)庫(kù)的時(shí)候,通常會(huì)有以下步驟:

  1. 加載驅(qū)動(dòng)
  2. 打開(kāi)連接
  3. 創(chuàng)建Statement
  4. 執(zhí)行SQL
  5. 關(guān)閉Statement和連接

每次對(duì)數(shù)據(jù)做操作相同的部分都有加載驅(qū)動(dòng)、打開(kāi)連接、創(chuàng)建Statement、關(guān)閉Statement和連接,差別的部分僅在執(zhí)行SQL部分,因此非常適用于使用模版方法模式。下面我們就根據(jù)這個(gè)場(chǎng)景,模擬舉例。

序號(hào) 類名 角色 說(shuō)明
1 AbstractTemplate AbstractClass 定義了模版方法的抽象類
2 ConcreteTemplate ConcreteClass 具體子類,實(shí)現(xiàn)了父類的抽象方法
3 TemplateMain 客戶端 演示調(diào)用

AbstractTemplate類中的execute()就是模版方法,它定義了一個(gè)算法框架,包括了openConnection、doQuery、closeConnection等基本操作,其中doQuery是抽象的。ConcreteTemplate繼承自AbstractTemplate,實(shí)現(xiàn)了doQuery方法。

Paste_Image.png

1. 抽象模版類。

/**
 * 抽象模版類
 */
public abstract class AbstractTemplate {

    private void openConnection(){
        System.out.println("打開(kāi)連接");
    }

    // 模版方法
    public final void execute(){
        openConnection();
        doQuery();
        closeConnection();
    }

    // 抽象方法
    protected abstract void doQuery();

    private void closeConnection(){
        System.out.println("關(guān)閉連接");
    }
}

2.具體模版類

/**
 * 具體模版類
 */
public class ConcreteTemplate extends AbstractTemplate {

    protected void doQuery() {
        System.out.println("執(zhí)行查詢");
    }
}

3.演示調(diào)用

public class TemplateMain {

    public static void main(String[] args) {
        AbstractTemplate template = new ConcreteTemplate();
        template.execute();
    }
}

結(jié)果輸出:

打開(kāi)連接
執(zhí)行查詢
關(guān)閉連接

3. 總結(jié)

模版方法模式是一種通過(guò)類繼承的方式、實(shí)現(xiàn)代碼復(fù)用的技術(shù),把公共行為放在父類中,而通過(guò)不同的子類來(lái)實(shí)現(xiàn)不同的行為。

除了JDBC操作數(shù)據(jù),在JMS或者M(jìn)Q的操作時(shí),同樣也可以用到模版方法。此外,Servlet中也有模版方法的影子,我們?cè)趯慡ervlet的時(shí)候,通常都會(huì)繼承自HttpServlet,只需要覆蓋其doGet()和doPost()即可;Servlet公共的行為都已經(jīng)在HttpServlet中實(shí)現(xiàn)了。

(完)

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

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

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