每日Android源碼設(shè)計模式之-14、模板方法模式

當(dāng)一些執(zhí)行的流程是固定的身辨,但是執(zhí)行的具體細(xì)節(jié)不一樣,這時候就需要用到模板方法模式


定義:

定義一個操作中的算法的框架芍碧,而將一些步驟延遲到子類中實(shí)現(xiàn)煌珊,使得子類在不改變算法的結(jié)構(gòu)的情況下,又能具體的定義某個算法實(shí)現(xiàn)的細(xì)節(jié)泌豆。


實(shí)現(xiàn)起來很簡單定庵,就是有一個父類,比如里面定義了stepOne()、stepTwo()洗贰、stepThree()等方法找岖,然后有一個execute()方法(可以定義為final避免子類覆蓋),execute里面按照需要的順序調(diào)用了上面的這些方法敛滋。

而在子類中许布,如果某個方法比如stepTwo,不同的子類實(shí)現(xiàn)方式一樣绎晃,我們在子類中去覆蓋重寫就好了蜜唾。


例子:

有一個父類 AbstractComputer,開機(jī)方法startUp庶艾,里面按照順序調(diào)用了powerOn袁余、checkHardware、loadOS咱揍、login方法颖榜。

我們知道,個人計算機(jī)和軍用計算機(jī)在checkHardware煤裙、loadOS掩完、login方法具體實(shí)現(xiàn)的細(xì)節(jié)可能是不一樣的。

我們創(chuàng)建兩個子類CoderComputer和MilitaryComputer硼砰,然后覆蓋具體方法且蓬。


Android源碼用的模板方法模式

AsyncTask其實(shí)就是一個典型的模板方法,調(diào)用execute后题翰,會一次執(zhí)行onPreExecute恶阴、doInBackground、onPostExecute也可以通過onProgressUpdate來更新進(jìn)度豹障。

這幾個方法的調(diào)用流程和進(jìn)程的切換是Android源碼中定義好了的冯事,而這幾個方法的具體實(shí)現(xiàn)需要用戶自己去實(shí)現(xiàn)。


總結(jié)

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

封裝了不變的部分沼填,擴(kuò)展可變部分

提取公共部分代碼桅咆,便于維護(hù)

缺點(diǎn):

可能帶來代碼閱讀的難度,有些地方用戶難于理解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坞笙,一起剝皮案震驚了整個濱河市岩饼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌薛夜,老刑警劉巖籍茧,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異梯澜,居然都是意外死亡寞冯,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吮龄,“玉大人俭茧,你說我怎么就攤上這事±熘悖” “怎么了母债?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長尝抖。 經(jīng)常有香客問我毡们,道長,這世上最難降的妖魔是什么昧辽? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任衙熔,我火速辦了婚禮,結(jié)果婚禮上搅荞,老公的妹妹穿的比我還像新娘红氯。我一直安慰自己,他們只是感情好咕痛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布脖隶。 她就那樣靜靜地躺著,像睡著了一般暇检。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上婉称,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天块仆,我揣著相機(jī)與錄音,去河邊找鬼王暗。 笑死悔据,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的俗壹。 我是一名探鬼主播科汗,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼绷雏!你這毒婦竟也來了头滔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤涎显,失蹤者是張志新(化名)和其女友劉穎坤检,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體期吓,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡早歇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片箭跳。...
    茶點(diǎn)故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡晨另,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谱姓,到底是詐尸還是另有隱情借尿,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布逝段,位于F島的核電站垛玻,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏奶躯。R本人自食惡果不足惜帚桩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嘹黔。 院中可真熱鬧账嚎,春花似錦、人聲如沸儡蔓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽喂江。三九已至召锈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間获询,已是汗流浹背涨岁。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吉嚣,地道東北人梢薪。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像尝哆,于是被迫代替她去往敵國和親秉撇。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評論 2 354

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

  • 1 場景問題# 1.1 登錄控制## 幾乎所有的應(yīng)用系統(tǒng)秋泄,都需要系統(tǒng)登錄控制的功能琐馆,有些系統(tǒng)甚至有多個登錄控制的功...
    七寸知架構(gòu)閱讀 1,961評論 3 53
  • 設(shè)計模式匯總 一、基礎(chǔ)知識 1. 設(shè)計模式概述 定義:設(shè)計模式(Design Pattern)是一套被反復(fù)使用印衔、多...
    MinoyJet閱讀 3,939評論 1 15
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理啡捶,服務(wù)發(fā)現(xiàn),斷路器奸焙,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法瞎暑,類相關(guān)的語法彤敛,內(nèi)部類的語法,繼承相關(guān)的語法了赌,異常的語法墨榄,線程的語...
    子非魚_t_閱讀 31,625評論 18 399
  • 1. 模式介紹 模式的定義 定義一個操作中的算法的框架,而將一些步驟延遲到子類中勿她。使得子類可以不改變一個算法的結(jié)構(gòu)...
    紅橙Darren閱讀 9,865評論 9 84