模版方法模式在 android中使用
模版方法模式(Template Method):
模版方法模式是類的行為模式。提供一個抽象類別,把一部分的邏輯以具體方法或構造子形式實現,然後聲明一些抽象方法,迫使子類實現剩餘的邏輯代碼。不同的子類可以以不同的方式實現這些抽象方法,所以子類實現的剩餘邏輯是不同的。另外,模版方法模式是基於繼承機制代碼複用的技術,它的結構和用法也是物件導向設計的核心。
模版方法模式的簡略類圖結構如下:
模版方法模式涉及到的幾個角色:
1、抽象模版角色
a、聲明一個或多個抽象方法,供子類來具體實現,這些方法為“基本方法”,他們是一個頂級邏輯的組成步驟。
b、聲明並實現一個模版方法,該方法一般是具體方法,給出了頂級邏輯的架構,具體的邏輯組成步驟延遲到子類實現。
2、具體模版角色
a、實現父類提供的一個或多個抽象方法。
b、每個抽象模版角色都有個具體模版角色對應,而每個具體模版角色都可給出這些對應抽象方法的不同實現。
好了,下面同樣以一個執行個體進行說明模版方法模式的使用。例子是這樣的:在android當中,我們經常使用繼承機制來為所有的Activity類定義一個基類BaseActivity,這樣可以把activity通用的邏輯封裝在基類中,實現代碼複用的能力,所以我們可以採用模版方法模式來實現,具體的結構類圖如下所示。
下面為模版方法模式的核心代碼部分:
抽象模版角色:
/**
* @description :
* 抽象模版角色-所有子類的父類
*/
public abstract class BaseActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 基本配置
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
// ...
setContentView(R.layout.activity_base);
// 初始化頁面執行
initView();
}
/**
* @description :
* 生命週期方法-初始化頁面執行
*/
protected abstract void initView();
/**
* @description :
* 生命週期方法-重新進入頁面執行
*/
protected abstract void resume();
/**
* @description :
* 生命週期方法-隱藏到案頭或被掛起執行
*/
protected abstract void pause();
/**
* @description :
* 生命週期方法-離開當前頁面執行
*/
protected abstract void destroy();
@Override
protected void onDestroy() {
super.onDestroy();
destroy();
}
@Override
protected void onPause() {
super.onPause();
pause();
}
@Override
protected void onResume() {
super.onResume();
resume();
}
}
具體模版方法角色:
/**
* @description :
* 具體模版角色-具體實現抽象方法
*/
public class LoadingActivity extends BaseActivity {
@Override
protected void initView() {
setContentView(R.layout.activity_loading);
// TODO
log(初始化頁面執行);
}
@Override
protected void resume() {
log(恢複頁面執行);
}
@Override
protected void pause() {
log(暫停頁面執行);
}
@Override
protected void destroy() {
log(頁面銷毀執行);
}
private void log(String msg) {
Log.d(Patterns, msg);
}
}
下面為模版方法模式執行個體啟動並執行結果: