模板方法模式(template method)

定義

Template Method Pattern:Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.
模板方法模式:定義一個操作中的算法的框架腋么,將一些步驟延遲到子類中實現(xiàn)撼短。模板方法讓子類能夠在不改變算法結(jié)構(gòu)的前提下粪狼,重新定義算法某些特定的步驟铅歼。

類圖

模板方法類圖

由類圖中可以看出模板方法模式使用了繼承。

  1. AbstractClass: 在抽象類中定義了一系列基本操作(PrimitiveOperation)泡嘴,這些操作可以是具體的也可以是抽象的,每一個操作對應(yīng)算法的一個步驟,在其子類中可以重新定義這些步驟溃槐。同時,在抽象類中實現(xiàn)了一個模板方法(TemplateMethod)科吭,用于定義一個算法的框架昏滴。在模板方法中,調(diào)用組織基本操作來搭建算法的框架对人。
  2. ConcreteClass: 繼承了AbstractClass谣殊,用于實現(xiàn)在父類中聲明的抽象基本操作來完成特定算法的步驟,也可以覆蓋在父類中已經(jīng)實現(xiàn)的具體基本操作牺弄。

模式實現(xiàn)

  1. 模板方法:一個模板方法是定義在抽象類中的姻几,把基本操作方法組合在一起形成一個總算法或一個總行為的方法。
  2. 基本方法:基本方法實現(xiàn)算法各個步驟的方法势告,是模板方法的組成部分蛇捌。基本方法可以分成三種:抽象方法(Abstract Method)培慌、具體方法(Concrete Method)和鉤子方法(Hook Method)豁陆。
  • 抽象方法:一個抽象方法由抽象類聲明,由其具體子類實現(xiàn)吵护。
  • 具體方法:一個具體方法由一個抽象類聲明并實現(xiàn)盒音,其子類可以覆蓋也可以直接繼承。
  • 鉤子方法:一個鉤子方法由一個抽象類聲明并實現(xiàn)馅而,而其子類可能會對其進行擴展祥诽,通常在父類中給出的是一個空方法。

與策略模式的區(qū)別

模板方法模式和策略模式所要解決的問題是類似的瓮恭,兩者都可以分離高層的算法和底層的具體實現(xiàn)細節(jié)雄坪。不過模板方法模式使用了繼承來解決問題,而策略模式使用的則是委托屯蹦。此外维哈,策略模式也允許具體實現(xiàn)細節(jié)獨立于高層的算法重用,不過要以一些額外的復(fù)雜性登澜、內(nèi)存和運行時間開銷作為代價阔挠。

總結(jié)

  1. 繼承
  2. 模板方法定義算法框架
  3. 子類實現(xiàn)某些特定步驟
  4. 分離高層算法和底層實現(xiàn)
  5. 不靈活,算法無法重用(策略模式可以)

參考:

模板方法模式深度解析

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末脑蠕,一起剝皮案震驚了整個濱河市购撼,隨后出現(xiàn)的幾起案子跪削,更是在濱河造成了極大的恐慌,老刑警劉巖迂求,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碾盐,死亡現(xiàn)場離奇詭異,居然都是意外死亡揩局,警方通過查閱死者的電腦和手機毫玖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谐腰,“玉大人孕豹,你說我怎么就攤上這事∈” “怎么了励背?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長砸西。 經(jīng)常有香客問我叶眉,道長,這世上最難降的妖魔是什么芹枷? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任衅疙,我火速辦了婚禮,結(jié)果婚禮上鸳慈,老公的妹妹穿的比我還像新娘饱溢。我一直安慰自己,他們只是感情好走芋,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布绩郎。 她就那樣靜靜地躺著,像睡著了一般翁逞。 火紅的嫁衣襯著肌膚如雪肋杖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天挖函,我揣著相機與錄音状植,去河邊找鬼。 笑死怨喘,一個胖子當(dāng)著我的面吹牛津畸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播必怜,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼洼畅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了棚赔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎靠益,沒想到半個月后丧肴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡胧后,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年芋浮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片壳快。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡纸巷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出眶痰,到底是詐尸還是另有隱情瘤旨,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布竖伯,位于F島的核電站存哲,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏七婴。R本人自食惡果不足惜祟偷,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望打厘。 院中可真熱鬧修肠,春花似錦、人聲如沸户盯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽先舷。三九已至艰管,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蒋川,已是汗流浹背牲芋。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留捺球,地道東北人缸浦。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像氮兵,于是被迫代替她去往敵國和親裂逐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

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