日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

android 模板方法模式,安卓设计模式(七)模板方法模式

發布時間:2023/11/27 asp.net 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 模板方法模式,安卓设计模式(七)模板方法模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

模板方法模式用于固定相關操作的執行流程,將具體實現延遲到子類中

該系列其他文章:

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

使用場景:

代碼重構時,模板方法是經常被用到的,將固定部分提取到父類中,具體實現則由子類負責

一系列操作總是有固定流程

多個子類擁有公共方法,且邏輯基本相同

實現舉例

在Android中,往往會有一些全局的基類,包括BaseActivity,BaseFragment等等,用于規范整個程序的View層的代碼風格,此時,即可充分運用到模板方法模式:

BaseActivity:

public abstract class IBaseActivity extends AppCompatActivity {

private SystemBarTintManager tintManager;

private int systemBarColor = R.color.colorPrimaryDark;//默認的狀態欄顏色

protected final EventBus mEventBus = EventBus.getDefault();//事件總線

@Override

protected final void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

getArgs();

setContentView(initLayout());

initWindow(systemBarColor);

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN | WindowManager.LayoutParams

.SOFT_INPUT_STATE_HIDDEN);//解決Andriod軟鍵盤出現把原來的布局給頂上去的方法

ButterKnife.bind(this);

initView();

requestData();

}

/**

* 模板方法,用于返回布局ID

*/

public abstract int initLayout();

/**

* 模板方法,初始化View

*/

protected abstract void initView();

/**

* 模板方法,獲取數據,執行耗時操作

*/

protected abstract void requestData();

/**

* 提供給子類動態設置狀態欄顏色

*/

protected void setSystemBarColor(int colorId) {

initWindow(colorId);

}

//...省略一體化狀態欄處理

/**

* 該方法在onCreate中執行,用于獲取Fragment的參數傳遞

* 子類可按情況自行選擇復寫

*/

protected void getArgs() {

}

@Override

protected void onDestroy() {

super.onDestroy();

if (mEventBus.isRegistered(this)) mEventBus.unregister(this);

ButterKnife.unbind(this);//取消注入

}

}

使用:

public class TestActivity extends IBaseActivity {

@Override

public int initLayout() {

return 0;

}

@Override

protected void initView() {

}

@Override

protected void requestData() {

}

}

不難看出模板方法的兩個關鍵點:

父類中控制流程的方法定義為Final

父類中提供一系列子類可復寫的方法,從而將具體步驟中的實現延遲到子類中

從上面可以看出,BaseActivity中的Oncrea()方法被定義為Final,所以子類是無法重寫的,這樣可以很好的避免子類復寫導致執行流程被打亂.由于父類中流程已經定義好,子類只需要負責具體實現的步驟即可,這樣代碼結構非常清晰,且不容易出錯.

實際開發中可以多使用模板方法模式來進行上層結構的封裝,固定操作流程,減少人為出錯,也便于閱讀.

關于作者

總結

以上是生活随笔為你收集整理的android 模板方法模式,安卓设计模式(七)模板方法模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

歡迎分享!

轉載請說明來源于"生活随笔",并保留原作者的名字。

本文地址:android 模板方法模式,安卓设计模式(七)模板方法模式