模版方法模式在 android中使用

來源:互聯網
上載者:User

模版方法模式在 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);

}

}

 

下面為模版方法模式執行個體啟動並執行結果:

 

 

 

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.