1.1 定義
定義一個模板結(jié)構(gòu),將具體內(nèi)容延遲到子類去實現(xiàn),使得不改變這些具體的算法結(jié)構(gòu)此虑,就能夠重新定義算法的執(zhí)行步驟
模板方法通用類圖
模板方法模式非常簡單,僅僅使用到了Java的繼承機(jī)制口锭,AbstractClass稱為抽象模板類朦前,里面包括兩類方法
- 基本方法:由子類實現(xiàn),并在模板方法里面使用
- 模板方法:負(fù)責(zé)調(diào)度基本方法鹃操,可以有一個或者多個韭寸,一般使用final修飾,避免被外界復(fù)寫串改
2组民、模板方法模式舉例
在Android中我們一般會封裝一個BaseActivity用來規(guī)范化setContent和初始化view和初始化數(shù)據(jù)棒仍,BaseActivity就是一個典型的抽象模板類,類圖如下
BaseActivity模板方法
代碼實現(xiàn)如下:
定義抽象模板BaseActivity
public abstract class BaseActivity extends AppCompatActivity {
/**
* 基本方法:設(shè)置布局Id
*
* @return 布局id
*/
protected abstract int getLayoutId();
/**
* 基本方法:初始化View
*/
protected abstract void initView();
/**
* 基本方法:初始化數(shù)據(jù)
*/
protected abstract void initData();
/**
* 模板方法:一般加上final關(guān)鍵字防止被外界修改
*/
public final void initActivity() {
if (getLayoutId() > 0) {
setContentView(getLayoutId());
}
initView();
initData();
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initActivity();
}
}
子類實現(xiàn)基本方法
public class MainActivity extends BaseActivity {
private TextView mTvContent;
@Override
protected int getLayoutId() {
return R.layout.activity_main;
}
@Override
protected void initView() {
mTvContent = findViewById(R.id.tvContent);
}
@Override
protected void initData() {
String content = "模擬數(shù)據(jù)11111111111222222222222333333333333";
mTvContent.setText(content);
}
}
總的來說模板方法模式是一種簡單的但是使用場景較多的設(shè)計模式