簡(jiǎn)易理解設(shè)計(jì)模式之:模板方法模式——Android中的BaseActivity基類

介紹:

模板方法模式屬于行為型模式申尤。定義一個(gè)操作中的算法骨架,而將一些步驟延遲到子類中衙耕。模板方法使得子類可以不改變一個(gè)算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟昧穿。

類圖:

模板方法模式UML類圖

AbstractClass(抽象模板類):定義了一套算法框架。
ConcreteClass(具體實(shí)現(xiàn)類):實(shí)現(xiàn)模板方法步驟中未執(zhí)行的方法橙喘。

用法:

? 多個(gè)子類有公共的方法时鸵,并且邏輯基本相同時(shí)。
? 重要厅瞎、復(fù)雜的算法饰潜,可以把核心算法設(shè)計(jì)為模板方法,周邊的相關(guān)細(xì)節(jié)功能則由各個(gè)子類實(shí)現(xiàn)和簸。
? 重構(gòu)時(shí)彭雾,模板方法模式是一個(gè)經(jīng)常使用的模式,把相同的代碼抽到父類中锁保,然后通過(guò)子類約束其行為薯酝。

個(gè)人理解:
這個(gè)模式非常簡(jiǎn)單,實(shí)際上是封裝一個(gè)固定流程:第一步做什么爽柒、第二部做什么吴菠、第三部做什么....然后再用子類將步驟的方法進(jìn)行替換。

例子:

在App開(kāi)發(fā)中霉赡,不管是iOS還是Android橄务,我們每一個(gè)界面控制器都會(huì)有著很多相同的方法幔托,例如:初始化界面穴亏、初始化數(shù)據(jù)蜂挪、設(shè)置相同的主題等等操作∩せ可能很多朋友已經(jīng)在無(wú)意之中用到了這種模式棠涮,下面就讓我們?cè)贏ndoird上試一下:

需求:實(shí)現(xiàn)界面控制器的基類

1、繼承實(shí)現(xiàn)

1.1刺覆、新建一個(gè)BaseActivity基類

public abstract class BaseActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_base);
    }
}

說(shuō)明一下:onCreate()中調(diào)用setContentView()加載界面布局严肪,每一個(gè)界面都有一個(gè)不同的xml文件和控制器綁定。沒(méi)有學(xué)過(guò)安卓的朋友也不難理解谦屑。

1.2驳糯、定義算法框架,修改BaseActivity基類

public abstract class BaseActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_base); 子類實(shí)現(xiàn)
        initData();
        initView();
    }

    protected abstract void initData(); //加載數(shù)據(jù)
    protected abstract void initView(); //加載界面
}

1.3氢橙、讓子類繼承BaseActivity類

public class TestActivity extends BaseActivity {
    
    @Override
    protected void initView() {
        setContentView(R.layout.activity_test);
        //findViewById()等操作
    }

    @Override
    protected void initData() {
        //初始化數(shù)據(jù)
    }
}

我相信有不少朋友到這一步就完事了酝枢。每個(gè)控制器都有不同的界面布局文件,在initView方法中綁定一下悍手,看起來(lái)也沒(méi)錯(cuò)和挺方便帘睦。

在這里,其實(shí)只是實(shí)現(xiàn)了初步的繼承坦康,每一個(gè)子類都還需要實(shí)現(xiàn)一遍setContentView()的方法竣付。我們既然用了繼承,就應(yīng)該讓子類中所有重復(fù)的代碼都上升到父類去滞欠。

2古胆、模板方法模式實(shí)現(xiàn)

2.1、修改BaseActivity類

public abstract class BaseActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(initLayout()); //重點(diǎn)是這句
        initView();
        initData();
    }

    protected abstract int initLayout(); //加載xml布局
    protected abstract void initData(); //加載數(shù)據(jù)
    protected abstract void initView(); //加載界面
}

在這里仑撞,我們把setContentView()的方法放回父類中赤兴,在每一個(gè)子類傳入布局id就可以了,繼續(xù)看一下:

2.2隧哮、修改子類

public class TestActivity extends BaseActivity {
    
    @Override
    protected int initLayout() {
        return R.layout.activity_test;
    }

    @Override
    protected void initView() {
        //findViewById()等操作
    }


    @Override
    protected void initData() {
        //初始化數(shù)據(jù)
    }

}
3桶良、總結(jié)

此模式總結(jié)概括就是流程封裝。非常的簡(jiǎn)單沮翔,相信大家也在無(wú)意之中用到了這種模式陨帆。那我們不妨再檢查下自己的代碼,有無(wú)存在1.1中提到的問(wèn)題~

感謝您的閱讀~

轉(zhuǎn)載請(qǐng)注明出處喔:http://www.reibang.com/p/98cb3f90660a

推薦閱讀

基礎(chǔ)篇:
設(shè)計(jì)模式前篇之——UML類圖必會(huì)知識(shí)點(diǎn)
設(shè)計(jì)模式前篇之——一起過(guò)一下面向?qū)ο蟮母拍?/a>
創(chuàng)建型模式:
簡(jiǎn)易理解設(shè)計(jì)模式之:簡(jiǎn)單工廠模式——來(lái)試試接入支付功能
簡(jiǎn)易理解設(shè)計(jì)模式之:工廠方法模式——數(shù)據(jù)存儲(chǔ)例子
簡(jiǎn)易理解設(shè)計(jì)模式之:抽象工廠模式——更換數(shù)據(jù)庫(kù)例子
簡(jiǎn)易理解設(shè)計(jì)模式之:建造者模式——學(xué)習(xí)使用“鏈?zhǔn)秸{(diào)用”
簡(jiǎn)易理解設(shè)計(jì)模式之:原型模式——深采蚀、淺拷貝的概念
簡(jiǎn)易理解設(shè)計(jì)模式之:?jiǎn)卫J健獑卫J降膸追N常用寫(xiě)法
結(jié)構(gòu)型模式:
簡(jiǎn)易理解設(shè)計(jì)模式之:適配器模式——Android列表視圖控件設(shè)計(jì)方式
簡(jiǎn)易理解設(shè)計(jì)模式之:橋接模式——穿衣服經(jīng)典案例2
簡(jiǎn)易理解設(shè)計(jì)模式之:組合模式——實(shí)現(xiàn)View中的樹(shù)狀結(jié)構(gòu)
簡(jiǎn)易理解設(shè)計(jì)模式之:裝飾模式——穿衣服經(jīng)典案例
簡(jiǎn)易理解設(shè)計(jì)模式之:外觀模式——第三方SDK的幫助類
簡(jiǎn)易理解設(shè)計(jì)模式之:享元模式——五子棋游戲例子
簡(jiǎn)易理解設(shè)計(jì)模式之:代理模式——iOS視圖控件設(shè)計(jì)方式
行為型模式:
簡(jiǎn)易理解設(shè)計(jì)模式之:策略模式——優(yōu)化一下支付功能
簡(jiǎn)易理解設(shè)計(jì)模式之:模板方法模式——Android中的BaseActivity基類
簡(jiǎn)易理解設(shè)計(jì)模式之:觀察者模式——監(jiān)聽(tīng)與回調(diào)
簡(jiǎn)易理解設(shè)計(jì)模式之:狀態(tài)模式——優(yōu)化登錄操作
簡(jiǎn)易理解設(shè)計(jì)模式之:備忘錄模式——Word文檔的工作原理
簡(jiǎn)易理解設(shè)計(jì)模式之:迭代器模式——遍歷對(duì)象的好幫手
簡(jiǎn)易理解設(shè)計(jì)模式之:命令模式——實(shí)現(xiàn)命令的參數(shù)化配置
簡(jiǎn)易理解設(shè)計(jì)模式之:責(zé)任鏈模式——OA中請(qǐng)假流程示例
簡(jiǎn)易理解設(shè)計(jì)模式之:中介者模式——多人聊天室例子
簡(jiǎn)易理解設(shè)計(jì)模式之:解釋器模式——語(yǔ)言和文法
簡(jiǎn)易理解設(shè)計(jì)模式之:訪問(wèn)者模式——員工考核例子

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末疲牵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子榆鼠,更是在濱河造成了極大的恐慌纲爸,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妆够,死亡現(xiàn)場(chǎng)離奇詭異识啦,居然都是意外死亡负蚊,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)颓哮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)家妆,“玉大人,你說(shuō)我怎么就攤上這事冕茅∩思” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵姨伤,是天一觀的道長(zhǎng)哨坪。 經(jīng)常有香客問(wèn)我,道長(zhǎng)乍楚,這世上最難降的妖魔是什么齿税? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮炊豪,結(jié)果婚禮上凌箕,老公的妹妹穿的比我還像新娘。我一直安慰自己词渤,他們只是感情好牵舱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著缺虐,像睡著了一般芜壁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上高氮,一...
    開(kāi)封第一講書(shū)人閱讀 51,215評(píng)論 1 299
  • 那天慧妄,我揣著相機(jī)與錄音,去河邊找鬼剪芍。 笑死塞淹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的罪裹。 我是一名探鬼主播饱普,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼状共!你這毒婦竟也來(lái)了套耕?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤峡继,失蹤者是張志新(化名)和其女友劉穎冯袍,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體碾牌,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡康愤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年关划,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片翘瓮。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖裤翩,靈堂內(nèi)的尸體忽然破棺而出资盅,到底是詐尸還是另有隱情,我是刑警寧澤踊赠,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布呵扛,位于F島的核電站,受9級(jí)特大地震影響筐带,放射性物質(zhì)發(fā)生泄漏今穿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一伦籍、第九天 我趴在偏房一處隱蔽的房頂上張望蓝晒。 院中可真熱鬧,春花似錦帖鸦、人聲如沸芝薇。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)洛二。三九已至,卻和暖如春攻锰,著一層夾襖步出監(jiān)牢的瞬間晾嘶,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工娶吞, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留垒迂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓妒蛇,卻偏偏與公主長(zhǎng)得像娇斑,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子材部,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354