天天看點

Android設計模式之Activity基類封裝設計模式之Activity基類封裝

設計模式之Activity基類封裝

  • 概述
  • 為什麼要使用設計模式
  • 模闆設計模式的介紹
  • Activity的與模闆設計模式之間的關系
  • 總結

概述

說到設計模式,反正隻要做過開發的就能說出一大堆設計模式,像最常用的單例設計模式、工廠設計模式、MVC設計模式等等。但是我們每個人知道這麼多設計模式,那麼運用的實際開發中的又有多少呢,是以用實踐檢驗真理才是硬道理。

為什麼要使用設計模式

設計模式是一套被反複使用的、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了重用代碼、讓代碼更容易被他人了解、保證代碼可靠性。友善快捷開發。
  • 重用
  • 易讀
  • 可靠
  • 開發快

模闆設計模式的介紹

今天我們要說的就是模闆設計模式,也是在Android基類中大家常用的一種設計模式。

簡單介紹:定義一個操作中的算法的骨架,而将一些步驟延遲到子類中。模闆方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。

場景:

1、在造房子的時候,地基、走線、水管都一樣,隻有在建築的後期才有加壁櫥加栅欄等差異。

2、比如說有些工廠使用的模具,模型一樣,隻是有些細節上的差别

個人了解:某些特定的場合流程是一緻的,但是某些細節的東西不太确定。那麼這種情況下可以考慮使用模闆設計模式

Activity的與模闆設計模式之間的關系

我們通常寫一個Activity都會經曆以下步驟

1、建立布局

2、初始化控件

3、初始化資料

4、其他等等

每一個Activity都是這樣建立的,甚至每個方法都是一樣的,隻是布局和細節,是以用模闆設計模式再好不過了。

public class MainActivity extends AppCompatActivity {

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

        //1、初始化布局
        setContentView(R.layout.activity_main);

        //2、初始化控件
        initView();

        //3、初始化資料
        initData();

        //4、其他(如點選事件等等)

    }

    private void initData() {
    }

    private void initView() {
    }
}
           

是以我們就需要建立一個模闆BaseActivity

package commonutils.jsonnan.com.myapplication;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;

/**
 * @author wangnan
 * @time 2017/5/9 16:06
 * @des
 */

public abstract class BaseActivity extends AppCompatActivity implements View.OnClickListener{

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

        //0、初始化基類資料
        initBaseData();

        //1、初始化布局
        setContentView(getRootView());

        //2、初始化控件
        initView();

        //3、初始化資料
        initData();

        //4、初始化點選事件
        initListener();
    }
    /**初始化基類資料*/
    private void initBaseData(){};
    /**初始化布局*/
    protected abstract int getRootView();
    /**初始化控件*/
    protected abstract void initView();
    /**初始化資料*/
    protected abstract void initData();
    /**初始化點選事件*/
    protected abstract void initListener();

    @Override
    public void onClick(View view) {

    }

    /**
     * 可以寫一寫常用的方法,但是為了記憶體管理有些最好還是使用工具類
     * 因為如果寫到基類裡面,他是初始化到記憶體裡面的,也就是說沒有使用,就已經占用空間
     */

    protected void startActivity(Class<? extends Activity> clazz){
        Intent in = new Intent(this,clazz);
        startActivity(in);
    }
}

           

說明:

1、此時需要使用到抽象的概念

2、有些不需要子類重寫的方法使用private聲明,如initBaseActivity()方法

3、使用的時候直接繼承BaseActivity即可

4、不需要重寫的方法,不需要申明抽象

5、也可以把這些通用的方法寫到接口裡面,進而BaseActivity實作接口中的方法

package commonutils.jsonnan.com.myapplication;

/**
 * @author wangnan
 * @time 2017/5/9 16:26
 * @des
 */

public interface ActivityInterface {


    //1、初始化布局
    int getRootView();

    //2、初始化控件
    void initView();

    //3、初始化資料
    void initData();

    //4、初始化點選事件
    void initListener();
}
           

總結

設計模式重在思想與實踐,實踐檢驗真理

模闆設計模式:某些特定的場合流程是一緻的,但是某些細節的東西不太确定。

繼續閱讀