Android設計模式之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();
}
總結
設計模式重在思想與實踐,實踐檢驗真理
模板設計模式:某些特定的場合流程是一致的,但是某些細節的東西不太確定。