模板方法模式

介紹

在面向?qū)ο箝_發(fā)過程中蔚鸥,通常會遇到一個這樣的問題,我們知道一個算法所需的關(guān)鍵步驟捧弃,并確定了這些步驟的執(zhí)行順序赠叼,但是,某些步驟的具體實現(xiàn)是未知的违霞,或者說某些步驟的實現(xiàn)是會隨著環(huán)境的變化而變化的嘴办。這類問題的解決方案就是模板方式方法。

定義

定義一個操作中的算法的框架买鸽,而將一些步驟延遲到子類中涧郊,使得子類可以不改變一個算法的結(jié)構(gòu)即可重定義算法的某些特定步驟。

使用場景

  1. 多個子類有公有的方法眼五,并且邏輯基本相同
  2. 重要妆艘、復(fù)雜的算法彤灶,可以把核心算法設(shè)計為模板方法,周邊的相關(guān)細(xì)節(jié)功能則有各個子類實現(xiàn)
  3. 重構(gòu)時双仍,模板方法模式是一個經(jīng)常使用的模式枢希,把相同的代碼抽到父類中桌吃,然后通過鉤子函數(shù)約束其行為朱沃。

角色介紹

ABSTemplate 抽象類,定義了一套算法框架茅诱,并提供了一個鉤子函數(shù)逗物,鉤子函數(shù)中按算法框架的邏輯流程調(diào)用各步驟方法,鉤子函數(shù)是 final 的瑟俭,保證邏輯流程不能被子類修改翎卓,子類只能改變某一步驟中的具體實現(xiàn),從而保證邏輯流程的穩(wěn)定性摆寄。其中的算法步驟我們稱為模板方法失暴。

ConcreteImpl 具體實現(xiàn)類,負(fù)責(zé)算法框架各個步驟的具體實現(xiàn)

Android 源碼中的模板方法

在 Android 中微饥,AsyncTask 是一個比較常用的類逗扒,這個類就是用了模板方法模式。使用 AsyncTask 時欠橘,我們把耗時方法放入 doInBackground 方法中矩肩,在 doInBackground 之前,還可以在 onPreExcute 方法中做一些初始化操作肃续,doInBackground 執(zhí)行完成后黍檩,會執(zhí)行 onPostExcute 方法。而我們只需要構(gòu)建 AsyncTask 對象始锚,然后執(zhí)行 execute 方法即可刽酱。可以看到整個過程就是一個框架瞧捌,具體的實現(xiàn)都需要子類來完成棵里,并且執(zhí)行的算法框架時固定的。

總結(jié)

模板方法用 4 個字概括就是察郁,流程封裝衍慎。也就是把某個固定的流程封裝到一個 final 函數(shù)中,并且讓子類能夠定制這個流程中的某些或所有步驟皮钠,這就要求父類提取共用的代碼稳捆,提升代碼的復(fù)用率,同時也帶來了更好的擴(kuò)展性麦轰。

優(yōu)點

  1. 封裝不變代碼乔夯,擴(kuò)展可變部分
  2. 提取公共代碼部分砖织,便于維護(hù)

缺點

模板方法會帶來代碼閱讀的難度,讓用戶覺得難以理解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末末荐,一起剝皮案震驚了整個濱河市侧纯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌甲脏,老刑警劉巖眶熬,帶你破解...
    沈念sama閱讀 223,126評論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異块请,居然都是意外死亡娜氏,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評論 3 400
  • 文/潘曉璐 我一進(jìn)店門墩新,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贸弥,“玉大人,你說我怎么就攤上這事海渊∶嗥#” “怎么了?”我有些...
    開封第一講書人閱讀 169,941評論 0 366
  • 文/不壞的土叔 我叫張陵臣疑,是天一觀的道長盔憨。 經(jīng)常有香客問我,道長朝捆,這世上最難降的妖魔是什么般渡? 我笑而不...
    開封第一講書人閱讀 60,294評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮芙盘,結(jié)果婚禮上驯用,老公的妹妹穿的比我還像新娘。我一直安慰自己儒老,他們只是感情好蝴乔,可當(dāng)我...
    茶點故事閱讀 69,295評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著驮樊,像睡著了一般薇正。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上囚衔,一...
    開封第一講書人閱讀 52,874評論 1 314
  • 那天挖腰,我揣著相機(jī)與錄音,去河邊找鬼练湿。 笑死猴仑,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的肥哎。 我是一名探鬼主播辽俗,決...
    沈念sama閱讀 41,285評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼疾渣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了崖飘?” 一聲冷哼從身側(cè)響起榴捡,我...
    開封第一講書人閱讀 40,249評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎朱浴,沒想到半個月后吊圾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,760評論 1 321
  • 正文 獨居荒郊野嶺守林人離奇死亡赊琳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,840評論 3 343
  • 正文 我和宋清朗相戀三年街夭,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片躏筏。...
    茶點故事閱讀 40,973評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖呈枉,靈堂內(nèi)的尸體忽然破棺而出趁尼,到底是詐尸還是另有隱情,我是刑警寧澤猖辫,帶...
    沈念sama閱讀 36,631評論 5 351
  • 正文 年R本政府宣布酥泞,位于F島的核電站,受9級特大地震影響啃憎,放射性物質(zhì)發(fā)生泄漏芝囤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,315評論 3 336
  • 文/蒙蒙 一辛萍、第九天 我趴在偏房一處隱蔽的房頂上張望悯姊。 院中可真熱鬧,春花似錦贩毕、人聲如沸悯许。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽先壕。三九已至,卻和暖如春谆甜,著一層夾襖步出監(jiān)牢的瞬間垃僚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評論 1 275
  • 我被黑心中介騙來泰國打工规辱, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留谆棺,地道東北人。 一個月前我還...
    沈念sama閱讀 49,431評論 3 379
  • 正文 我出身青樓按摘,卻偏偏與公主長得像包券,于是被迫代替她去往敵國和親纫谅。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,982評論 2 361

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