Android 架構(gòu)師之路7 設(shè)計(jì)模式之模板方法模式

Android 架構(gòu)師之路 目錄

1盟榴、模板方法模式概念

1.1 介紹

在模板模式(Template Pattern)中颓影,一個(gè)抽象類公開定義了執(zhí)行它的方法的方式/模板枫虏。它的子類可以按需要重寫方法實(shí)現(xiàn),但調(diào)用將以抽象類中定義的方式進(jìn)行灸姊。這種類型的設(shè)計(jì)模式屬于行為型模式拱燃。

1.2 定義

模板方法模式:定義一個(gè)算法的骨架,將骨架中的特定步驟延遲到子類中力惯。模板方法模式使得子類可以不改變算法的結(jié)構(gòu)即可重新定義該算法的某些特定步驟

1.3 使用場景
  • 系統(tǒng)需要將請求調(diào)用者和請求接收者解耦碗誉,使得調(diào)用者和接收者不直接交互。
  • 系統(tǒng)需要在不同的時(shí)間指定請求父晶、將請求排隊(duì)(如:線程池+工作隊(duì)列)和執(zhí)行請求哮缺。
  • 系統(tǒng)需要支持命令的撤銷(Undo)操作和恢復(fù)(Redo)操作。
  • 系統(tǒng)需要將一組操作組合在一起甲喝,即支持宏命令尝苇。

2、模板方法模式UML類圖

模板方法模式UML類圖
  • 抽象類(AbstractClass):實(shí)現(xiàn)了模板方法,定義了算法的骨架糠溜。
  • 具體類(ConcreteClass):實(shí)現(xiàn)抽象類中的抽象方法淳玩,已完成完整的算法。

3非竿、模板方法模式代碼實(shí)現(xiàn)

AbstractClass:
public abstract class Game {
       abstract void initialize();
       abstract void startPlay();
       abstract void endPlay();

       public final void play(){
           initialize();
           startPlay();
           endPlay();
       }
}
ConcreteClass:
public class KingGloryGame extends Game {
    @Override
    void initialize() {
        System.out.println("初始化王者榮耀游戲");
    }

    @Override
    void startPlay() {
        System.out.println("王者榮耀游戲開始");
    }

    @Override
    void endPlay() {
        System.out.println("王者榮耀游戲結(jié)束");
    }
}
public class LoLGame extends Game {
    @Override
    void initialize() {
        System.out.println("初始化LOL游戲");
    }

    @Override
    void startPlay() {
        System.out.println("LOL游戲開始");
    }

    @Override
    void endPlay() {
        System.out.println("LOL游戲結(jié)束");
    }
}
Client:
public class Client {
    public static void main(String[] args){
        Game game = new LoLGame();
        game.play();
        game = new KingGloryGame();
        game.play();
    }
}

結(jié)果輸出:

初始化LOL游戲
LOL游戲開始
LOL游戲結(jié)束
初始化王者榮耀游戲
王者榮耀游戲開始
王者榮耀游戲結(jié)束

4蜕着、模板方法模式Android中使用

AsyncTask類、activity中的onCreate() 等生命周期

5红柱、模式總結(jié)

5.1 優(yōu)點(diǎn)
  • 封裝不變部分承匣,擴(kuò)展可變部分。
  • 提取公共代碼豹芯,便于維護(hù)悄雅。
  • 行為由父類控制,子類實(shí)現(xiàn)铁蹈。
5.2 缺點(diǎn)
  • 每一個(gè)不同的實(shí)現(xiàn)都需要一個(gè)子類來實(shí)現(xiàn)宽闲,導(dǎo)致類的個(gè)數(shù)增加,使得系統(tǒng)更加龐大握牧。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末容诬,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子沿腰,更是在濱河造成了極大的恐慌览徒,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颂龙,死亡現(xiàn)場離奇詭異习蓬,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)措嵌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門躲叼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人企巢,你說我怎么就攤上這事枫慷。” “怎么了浪规?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵或听,是天一觀的道長。 經(jīng)常有香客問我笋婿,道長誉裆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任缸濒,我火速辦了婚禮找御,結(jié)果婚禮上元镀,老公的妹妹穿的比我還像新娘。我一直安慰自己霎桅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布讨永。 她就那樣靜靜地躺著滔驶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卿闹。 梳的紋絲不亂的頭發(fā)上揭糕,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天,我揣著相機(jī)與錄音锻霎,去河邊找鬼著角。 笑死,一個(gè)胖子當(dāng)著我的面吹牛旋恼,可吹牛的內(nèi)容都是我干的吏口。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼冰更,長吁一口氣:“原來是場噩夢啊……” “哼产徊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蜀细,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤舟铜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后奠衔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谆刨,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年归斤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了痊夭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡官册,死狀恐怖生兆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情膝宁,我是刑警寧澤鸦难,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站员淫,受9級特大地震影響合蔽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜介返,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一拴事、第九天 我趴在偏房一處隱蔽的房頂上張望沃斤。 院中可真熱鬧,春花似錦刃宵、人聲如沸衡瓶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哮针。三九已至,卻和暖如春坦袍,著一層夾襖步出監(jiān)牢的瞬間十厢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工捂齐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛮放,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓奠宜,卻偏偏與公主長得像包颁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子挎塌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

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

  • 1 場景問題# 1.1 登錄控制## 幾乎所有的應(yīng)用系統(tǒng)徘六,都需要系統(tǒng)登錄控制的功能,有些系統(tǒng)甚至有多個(gè)登錄控制的功...
    七寸知架構(gòu)閱讀 1,941評論 3 53
  • 設(shè)計(jì)模式基本原則 開放-封閉原則(OCP)榴都,是說軟件實(shí)體(類待锈、模塊、函數(shù)等等)應(yīng)該可以拓展嘴高,但是不可修改竿音。開-閉原...
    西山薄涼閱讀 3,753評論 3 13
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,504評論 25 707
  • 當(dāng)我知道你要離去 到遠(yuǎn)方過生活時(shí) 不禁輕聲念道近日來所背的詩 不曾想過 也會(huì)如此恰好 “與君離別意,同是宦游人 海...
    子芽閱讀 349評論 0 3
  • 十一月十四日凌晨一點(diǎn)我回家了拴驮,為了去見弟弟春瞬,這有點(diǎn)瘋狂,可我已經(jīng)五個(gè)月半不見他了套啤,我提前買了兩個(gè)雞腿餅宽气,和一盒花...
    南無NAMO閱讀 210評論 0 0