如何讓孩子愛上設(shè)計(jì)模式 ——24.模板方法模式(Template Method Pattern)

標(biāo)簽: 設(shè)計(jì)模式初涉


描述性文字

終于來到23種設(shè)計(jì)模式的最后一種:模板方法模式,聽名字感覺好像很復(fù)雜的樣子奠衔,
實(shí)則不然谆刨,先不講概念,先寫個(gè)簡單的例子归斤,通過例子來感受這個(gè)模式痊夭。


代碼示例

既然是最后一節(jié)的了,還是要走一波回憶殺的脏里,還記得之前小豬奶茶店的例子嗎她我?
在工廠方法模式那一章,我們寫了奶茶的制作過程過程是如下四步

奶茶的制作過程都是以上四步,我們用模板方法模式來寫個(gè)例子

先定義一個(gè)抽象的模板方法類番舆,這里我還加了一個(gè)鉤子方法
鉤子是一種被聲明在抽象類的方法根吁,可以為空或者默認(rèn)的實(shí)現(xiàn)。鉤子
的存在可以讓子類有能力對(duì)算法的不同點(diǎn)進(jìn)行掛鉤合蔽,是否需要掛鉤由
子類決定击敌。比如這里通過一個(gè)標(biāo)記確定是否需要打包,子類中可以
定義一個(gè)方法來調(diào)用這個(gè)方法拴事,我們在椰果綠茶里重寫這個(gè)鉤子方法沃斤。

接著是具體實(shí)現(xiàn)類,珍珠紅茶 與 椰果綠茶

最后客戶端調(diào)用

輸出結(jié)果

好的刃宵,例子非常簡單衡瓶,概念這些東西也就不難理解了~


概念相關(guān)

定義

定義一個(gè)操作中的算法的框架,而將一些步驟延遲到子類中牲证,使得子類可以不改變
一個(gè)算法的結(jié)構(gòu)即可沖定義該算法的某些特定步驟哮针。

兩個(gè)角色

  • AbstractClass抽象模板,定義了模板結(jié)構(gòu)坦袍,讓子類去具體實(shí)現(xiàn)
  • ConcreteClass具體模板十厢,具體實(shí)現(xiàn)抽象類的抽象方法

UML類圖

使用場景

  • 對(duì)一些復(fù)雜的算法進(jìn)行分割,將其算法中固定不變的部分設(shè)計(jì)為模板方法和父類具體方法捂齐,
    而一些可以改變的細(xì)節(jié)由其子類來實(shí)現(xiàn)蛮放。
  • 各子類中公共的行為應(yīng)被提取出來并集中到一個(gè)公共父類中以避免代碼重復(fù)。
  • 需要通過子類來決定父類算法中某個(gè)步驟是否執(zhí)行奠宜,實(shí)現(xiàn)子類對(duì)父類的反向控制包颁。

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  • 1.代碼復(fù)用,相同部分代碼放在抽象的父類中
  • 2.良好的可擴(kuò)展性
  • 3.反向控制压真,通過父類調(diào)用子類的操作娩嚼,通過子類的擴(kuò)展添加新的行為

缺點(diǎn)

需要為每一個(gè)基本方法的不同實(shí)現(xiàn)提供一個(gè)子類,如果父類中可變的基本方法太多滴肿,
將會(huì)導(dǎo)致類的個(gè)數(shù)增加岳悟,系統(tǒng)更加龐大,設(shè)計(jì)也更加抽象嘴高。


本節(jié)代碼示例

https://github.com/coder-pig/DesignPatternsExample/tree/master/23.Template%20Method%20Pattern


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末竿音,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子拴驮,更是在濱河造成了極大的恐慌,老刑警劉巖柴信,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件套啤,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)潜沦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門萄涯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人唆鸡,你說我怎么就攤上這事涝影。” “怎么了争占?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵燃逻,是天一觀的道長。 經(jīng)常有香客問我臂痕,道長伯襟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任握童,我火速辦了婚禮瓷炮,結(jié)果婚禮上吠卷,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好翔忽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著臂聋,像睡著了一般膘魄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上召调,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天膨桥,我揣著相機(jī)與錄音,去河邊找鬼唠叛。 笑死只嚣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的艺沼。 我是一名探鬼主播册舞,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼障般!你這毒婦竟也來了调鲸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤挽荡,失蹤者是張志新(化名)和其女友劉穎藐石,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體定拟,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡于微,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片株依。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡驱证,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出恋腕,到底是詐尸還是另有隱情抹锄,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布荠藤,位于F島的核電站伙单,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏商源。R本人自食惡果不足惜车份,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望牡彻。 院中可真熱鬧扫沼,春花似錦、人聲如沸庄吼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽总寻。三九已至器罐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間渐行,已是汗流浹背轰坊。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留祟印,地道東北人肴沫。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像蕴忆,于是被迫代替她去往敵國和親颤芬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

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