設(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)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市徐钠,隨后出現(xiàn)的幾起案子癌刽,更是在濱河造成了極大的恐慌,老刑警劉巖尝丐,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件显拜,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡爹袁,警方通過(guò)查閱死者的電腦和手機(jī)远荠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)失息,“玉大人譬淳,你說(shuō)我怎么就攤上這事№锞ぃ” “怎么了邻梆?”我有些...
    開(kāi)封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)绎秒。 經(jīng)常有香客問(wèn)我浦妄,道長(zhǎng),這世上最難降的妖魔是什么见芹? 我笑而不...
    開(kāi)封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任剂娄,我火速辦了婚禮,結(jié)果婚禮上玄呛,老公的妹妹穿的比我還像新娘阅懦。我一直安慰自己,他們只是感情好徘铝,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布耳胎。 她就那樣靜靜地躺著惯吕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪怕午。 梳的紋絲不亂的頭發(fā)上混埠,一...
    開(kāi)封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音诗轻,去河邊找鬼钳宪。 笑死,一個(gè)胖子當(dāng)著我的面吹牛扳炬,可吹牛的內(nèi)容都是我干的吏颖。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼恨樟,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼半醉!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起劝术,我...
    開(kāi)封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤缩多,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后养晋,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體衬吆,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年绳泉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了逊抡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡零酪,死狀恐怖冒嫡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情四苇,我是刑警寧澤孝凌,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站月腋,受9級(jí)特大地震影響蟀架,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜罗售,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一辜窑、第九天 我趴在偏房一處隱蔽的房頂上張望钩述。 院中可真熱鬧寨躁,春花似錦、人聲如沸牙勘。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至放钦,卻和暖如春色徘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背操禀。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工褂策, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人颓屑。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓斤寂,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親揪惦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子遍搞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容