模板設計模式

1. 定義


定義一個操作中的算法的框架,而將一些步驟延遲到子類。使得子類可以不改變一個算法的結構即可重新定義該算法的某些特定步驟。

其實就是系統、或者其他人已經把所有東西都寫好,把架子都搭好,里邊有的東西你自己可以根據自己的業務需求去實現就行,效果分析圖如下:


模板設計模式.png

2. 基本框架


角色的介紹:
AbstractClass:抽象類,定義了一套算法框架;
ConcreteClass:具體的實現類,可以自定義一些算法;

3. BaseActiivty的構建


/**
 * Email: 2185134304@qq.com
 * Created by JackChen 2018/3/31 21:43
 * Version 1.0
 * Params:
 * Description:  整個應用的 BaseActivity
*/
public abstract class BaseActivity extends AppCompatActivity {

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

        // 設置布局 layout
        setContentView();

        // 一些特定的算法,子類基本都會使用的
        ViewUtils.inject(this);

        // 設置標題
        initTitle() ;

        // 初始化界面
        initView() ;

        // 初始化數據
        initData() ;

    }

    // 設置布局 layout
    protected abstract void setContentView();

    // 設置標題
    protected abstract void initTitle();

    // 初始化界面
    protected abstract void initView();

    // 初始化數據
    protected abstract void initData();


    /**
     * 啟動Activity
     */
    protected void startActivity(Class<?> clazz){
        Intent intent = new Intent(this , clazz) ;
        startActivity(intent);
    }

}

BaseSkinActivity代碼如下:

/**
 * Email: 2185134304@qq.com
 * Created by JackChen 2018/4/1 8:52
 * Version 1.0
 * Params:
 * Description:  不要直接繼承BaseActivity,永遠都要給中間留一層BaseSkinActivity
*/
public abstract class BaseSkinActivity extends BaseActivity {
    // 這里預留出地方 防止后期會有什么新的功能添加
}

SecondActivity直接繼承BaseSkinActivity,而不是繼承BaseActivity

/**
 * Email: 2185134304@qq.com
 * Created by JackChen 2018/3/31 21:57
 * Version 1.0
 * Params:
 * Description:
*/
public class SecondActivity extends BaseSkinActivity{


    @ViewById(R.id.test_tv)
    TextView test_tv ;
    @ViewById(R.id.test_iv)
    ImageView test_iv ;


    /**
     * 設置布局文件
     */
    @Override
    protected void setContentView() {
        setContentView(R.layout.activity_second);
    }


    /**
     * 初始化頭部
     */
    @Override
    protected void initTitle() {

    }


    /**
     * findViewById
     */
    @Override
    protected void initView() {
        startActivity(SecondActivity.class);
    }


    /**
     * 請求網絡的數據
     */
    @Override
    protected void initData() {

    }
}

只可以把一些通用的代碼封裝到 BaseActivity,如果用的不是特別多的,就不要放到里邊

注意:

1>:BaseActivity中只能放一些通用的方法,基本是每個Activity都需要使用的方法,比如讀數據readDataBase最好不要放進來;
2>:如果是兩個或者兩個以上的地方要使用,最好寫一個工具類;
3>:因為每個子類Activity都會繼承BaseActivity,所以只要一繼承BaseActivity,那么這個子類就會加載進內存,那么該子類中的方法也就會加載進內存,其實內存在davilk層就是一塊內存地址,也就是時候如果你在BaseActivity中寫了很多的方法,而且有的方法又不太常用,所以就會占用很多的內存地址,那么肯定是會影響性能的;
4>:為了防止后期會有一些新的功能添加,所以永遠都要預留一層BaseSkinActivity,不要直接去繼承BaseActivity,而是要讓自己的類去繼承BaseSkinActivity;

4. 常見使用模板設計模式的有:


AsyncTask、View的繪制流程(View中的draw()方法)、BaseActivity、Activity的生命周期

5. 設計模式開源的網站:

https://github.com/simple-android-framework-exchange/android_design_patterns_analysis#schedule

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. 模式介紹 模式的定義 定義一個操作中的算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個算法的結構...
    紅橙Darren閱讀 9,891評論 9 84
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,084評論 25 708
  • 九年義務教育的小學階段,是小學生長身體,學做人,增知識,發展思維,開發智力的階段,在這一階段文化學習非常重...
    靜守SJX閱讀 4,580評論 0 3
  • 故事的開始 同大多數人一樣 讓我從頭想一萬次也不會想到我最后是跟他在一起 以至于每次說起這來都會感慨命運的神奇 ...
    是女神啊閱讀 480評論 0 0
  • 哦,如果你看到這里,app改名字了, 叫 世界外語通,原來打了這么多錯別字哈哈 說了這么多,來點干貨吧,看看究竟是...
    zokoko閱讀 231評論 0 1