模板模式--可復(fù)用流程的局部定制

算是讀書筆記吧

極客時間--設(shè)計模式之美


什么是模板模式

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)的情況下,重新定義算法中的某些步驟兵志。

舉個現(xiàn)實中的例子杂曲,在一個埋點上報的系統(tǒng)中:

  1. 基類實現(xiàn)通用的主體功能算法:
    比如新增冗美、格式化、存儲掸屡、切割等封寞。
  2. 子類重寫特殊的局部算法:
    比如上報(TCP/HTTP)方式、存儲的數(shù)據(jù)庫路徑等仅财。

模板方法中通過調(diào)用抽象方法狈究,達到定制的目的:
簡單的流程如下

插入 -- 父類實現(xiàn)
格式化 -- 父類實現(xiàn)
存儲 -- 父類實現(xiàn)
到達輪訓(xùn)時間 -- 父類實現(xiàn)
調(diào)用上報方法 -- 《《子類實現(xiàn)》》
上報完成刪除本地數(shù)據(jù) -- 父類實現(xiàn)

模板模式的作用

  1. 復(fù)用
    基類的作用是通過繼承復(fù)用模板方法(主體邏輯)
  2. 擴展
    子類的作用是通過重寫擴展抽象方法(特定功能)

模板模式在使用上,更傾向于指導(dǎo)如何實現(xiàn)一個高度復(fù)用流程中的局部擴展盏求。


經(jīng)典的模板模式

  1. 模板方法不允許子類重寫
    模板方法定義為 final抖锥,可以避免被子類重寫。
  2. 抽象方法要求子類必須實現(xiàn)
    需要子類重寫的方法定義為 abstract碎罚,可以強迫子類去實現(xiàn)磅废。

這兩點主要通過編譯器檢查進行約束
不過,在實際項目開發(fā)中荆烈,模板模式的實現(xiàn)比較靈活拯勉,以上兩點都不是必須的


Callback

通過Callback也可以實現(xiàn)可復(fù)用流程的局部定制

其本質(zhì)思想,與模板模式相同憔购,都是在通用流程中調(diào)用定制方法谜喊。
只不過從調(diào)用抽象方法,變成了調(diào)用某個Callback

插入 -- 父類實現(xiàn)
格式化 -- 父類實現(xiàn)
存儲 -- 父類實現(xiàn)
到達輪訓(xùn)時間 -- 父類實現(xiàn)
調(diào)用上報Callback -- 《《外部傳入》》
上報完成刪除本地數(shù)據(jù) -- 父類實現(xiàn)

但是在具體實現(xiàn)技術(shù)上倦始,二者是不同的,主要體現(xiàn)在

模板模式的擴展性基于繼承山卦,而Callback的擴展性基于組合

面向?qū)ο蟮挠幸粋€思想是組合優(yōu)于繼承鞋邑,在這里體現(xiàn)在:

  1. Callback可以很好的實現(xiàn)多繼承
  2. 用函數(shù)代替創(chuàng)建子類,更加輕量
  3. 不必為了一個小需求账蓉,實現(xiàn)全部的抽象方法
    由于編譯器的限制枚碗,abstract聲明的抽象方法必須全部實現(xiàn)。
    而Callback則規(guī)避了這個問題铸本,只需要實現(xiàn)當(dāng)前需求所需的幾個抽象方法(callback)即可肮雨。

當(dāng)然,靈活的代價就是犧牲一定的可讀性箱玷,比如單一職責(zé)原則怨规。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末陌宿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子波丰,更是在濱河造成了極大的恐慌壳坪,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掰烟,死亡現(xiàn)場離奇詭異爽蝴,居然都是意外死亡,警方通過查閱死者的電腦和手機纫骑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門蝎亚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人先馆,你說我怎么就攤上這事发框。” “怎么了磨隘?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵缤底,是天一觀的道長。 經(jīng)常有香客問我番捂,道長个唧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任设预,我火速辦了婚禮徙歼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鳖枕。我一直安慰自己魄梯,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布宾符。 她就那樣靜靜地躺著酿秸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪魏烫。 梳的紋絲不亂的頭發(fā)上辣苏,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音哄褒,去河邊找鬼稀蟋。 笑死,一個胖子當(dāng)著我的面吹牛呐赡,可吹牛的內(nèi)容都是我干的退客。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼萌狂!你這毒婦竟也來了档玻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤粥脚,失蹤者是張志新(化名)和其女友劉穎窃肠,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刷允,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡冤留,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了树灶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纤怒。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖天通,靈堂內(nèi)的尸體忽然破棺而出泊窘,到底是詐尸還是另有隱情,我是刑警寧澤像寒,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布烘豹,位于F島的核電站,受9級特大地震影響诺祸,放射性物質(zhì)發(fā)生泄漏携悯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一筷笨、第九天 我趴在偏房一處隱蔽的房頂上張望憔鬼。 院中可真熱鬧,春花似錦胃夏、人聲如沸轴或。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽照雁。三九已至,卻和暖如春答恶,著一層夾襖步出監(jiān)牢的瞬間囊榜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工亥宿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人砂沛。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓烫扼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親碍庵。 傳聞我的和親對象是個殘疾皇子映企,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

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