模板設(shè)計模式(一) - 定義及源碼中所用到的模板設(shè)計模式

前言

模板設(shè)計模式系列文章
模板設(shè)計模式(一) - 定義及源碼中所用到的模板設(shè)計模式
模板設(shè)計模式(二) - 線程池工作機制
模板設(shè)計模式(三) - OkHttp的 Dispatcher(線程池)

1. 模板設(shè)計模式定義斤儿?


定義一個操作中的算法的框架凌受,而將一些步驟延遲到子類中耻台。使得子類可以不改變一個算法的結(jié)構(gòu)就可以重定義該算法的某些特定步驟碳竟;

說白了,必須得有繼承漾岳,父類一般都是流程和通用部分的封裝,子類一般都是實現(xiàn)父類的方法粉寞,然后實現(xiàn)自己具體的功能尼荆;

2. 源碼中用到的模板設(shè)計模式?


1>:Activity的生命周期

  • 首先都是繼承自AppCompatActivty唧垦,它的流程和規(guī)范都已經(jīng)定義好了捅儒,需要我們自己定義的Activity(比如MainActivity、LoginActivity振亮、RegisterActivity等所有Activity)生命周期的流程和規(guī)范都要求與AppCompatActivity都是一樣的巧还;
  • 我們定義的每個Activity都可以定義不同的界面,可以實現(xiàn)具體的邏輯坊秸;

2>: AsyncTask

    /**
     * 除過 doInBackground在子線程執(zhí)行外麸祷,其余都是在主線程中執(zhí)行
     */
    class Task extends AsyncTask{


        /**
         * 執(zhí)行耗時操作  線程池
         */
        @Override
        protected Object doInBackground(Object[] params) {
            return null;
        }

        /**
         * 開始執(zhí)行
         */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }


        /**
         * 執(zhí)行完成  用handler切換到主線程
         */
        @Override
        protected void onPostExecute(Object object) {
            super.onPostExecute(object);
        }


        /**
         * 執(zhí)行進度
         */
        @Override
        protected void onProgressUpdate(Object[] values) {
            super.onProgressUpdate(values);
        }
    }

3>:自定義View中的 draw()方法

  • ViewGroup是不會調(diào)用 onDraw()方法的
  • 在View中,調(diào)用 dispatchDraw()褒搔,是繪制子孩子阶牍,不斷的循環(huán)調(diào)用子View的draw()方法,這個方法什么都沒寫星瘾,我們可以根據(jù)自己需求去實現(xiàn)

具體的可以參照我之前的文章:
(ST)View的繪制流程 - onDraw()源碼分析

4>:BaseActivity

3. 開發(fā)中的 BaseActivity


1>:父類 BaseActivity代碼如下:

/**
 * Email: 2185134304@qq.com
 * Created by Novate 2018/5/13 9:46
 * Version 1.0
 * Params:
 * Description:    模板設(shè)計模式
*/
public abstract class BaseActivity extends AppCompatActivity {

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // 1. 設(shè)置布局
        setContentView() ;


        /**
         * 這個叫做:鉤子
         *      可以達到子類控制父類走孽,在父類中返回true,子某一個子類中返回false
         */
        if (flagTest()) {
            // 2. 初始化頭部Title
            initTitle();
        }
        // 3. 初始化View
        initView() ;
        // 4. 訪問接口數(shù)據(jù)
        initData(savedInstanceState) ;

    }

    protected boolean flagTest() {
        return true;
    }

    protected abstract void initData(Bundle savedInstanceState);

    protected abstract void initView();

    protected abstract void initTitle();

    protected abstract void setContentView() ;

    public void startActivity(Class<? extends BaseActivity> clazz) {
        Intent intent =  new Intent(this,clazz);
        startActivity(intent);
    }
}

2>:子類MainActivity代碼如下:

public class MainActivity extends BaseActivity {


    @Override
    protected void initData(Bundle savedInstanceState) {

    }

    @Override
    protected void initView() {

    }

    @Override
    protected void initTitle() {

    }

    @Override
    protected void setContentView() {

    }


    /**
     * 鉤子:達到子類可以控制父類琳状,子類返回false磕瓷,父類返回true
     */
    @Override
    protected boolean flagTest() {
        return false;
    }
}

代碼已上傳至github
https://github.com/shuai999/Architect_day12.git

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市念逞,隨后出現(xiàn)的幾起案子困食,更是在濱河造成了極大的恐慌,老刑警劉巖肮柜,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件陷舅,死亡現(xiàn)場離奇詭異,居然都是意外死亡审洞,警方通過查閱死者的電腦和手機莱睁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門待讳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人仰剿,你說我怎么就攤上這事创淡。” “怎么了南吮?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵琳彩,是天一觀的道長。 經(jīng)常有香客問我部凑,道長露乏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任涂邀,我火速辦了婚禮瘟仿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘比勉。我一直安慰自己劳较,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布浩聋。 她就那樣靜靜地躺著观蜗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪衣洁。 梳的紋絲不亂的頭發(fā)上墓捻,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機與錄音闸与,去河邊找鬼毙替。 笑死,一個胖子當(dāng)著我的面吹牛践樱,可吹牛的內(nèi)容都是我干的厂画。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼拷邢,長吁一口氣:“原來是場噩夢啊……” “哼袱院!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起瞭稼,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤忽洛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后环肘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體欲虚,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年悔雹,在試婚紗的時候發(fā)現(xiàn)自己被綠了复哆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片欣喧。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖梯找,靈堂內(nèi)的尸體忽然破棺而出唆阿,到底是詐尸還是另有隱情,我是刑警寧澤锈锤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布驯鳖,位于F島的核電站,受9級特大地震影響久免,放射性物質(zhì)發(fā)生泄漏浅辙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一阎姥、第九天 我趴在偏房一處隱蔽的房頂上張望摔握。 院中可真熱鬧,春花似錦丁寄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至删咱,卻和暖如春屑埋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背痰滋。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工摘能, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人敲街。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓团搞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親多艇。 傳聞我的和親對象是個殘疾皇子逻恐,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353