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 上传字符串,Androi
- 下一篇: android5.0后新特性修改标题头,