1.1 定义
定义一个模板结构,将具体内容延迟到子类去实现,使得不改变这些具体的算法结构,就能够重新定义算法的执行步骤
模板方法通用类图
模板方法模式非常简单,仅仅使用到了Java的继承机制,AbstractClass称为抽象模板类,里面包括两类方法
- 基本方法:由子类实现,并在模板方法里面使用
- 模板方法:负责调度基本方法,可以有一个或者多个,一般使用final修饰,避免被外界复写串改
2、模板方法模式举例
在Android中我们一般会封装一个BaseActivity用来规范化setContent和初始化view和初始化数据,BaseActivity就是一个典型的抽象模板类,类图如下
BaseActivity模板方法代码实现如下:
定义抽象模板BaseActivity
public abstract class BaseActivity extends AppCompatActivity {
/**
* 基本方法:设置布局Id
*
* @return 布局id
*/
protected abstract int getLayoutId();
/**
* 基本方法:初始化View
*/
protected abstract void initView();
/**
* 基本方法:初始化数据
*/
protected abstract void initData();
/**
* 模板方法:一般加上final关键字防止被外界修改
*/
public final void initActivity() {
if (getLayoutId() > 0) {
setContentView(getLayoutId());
}
initView();
initData();
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initActivity();
}
}
子类实现基本方法
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 = "模拟数据11111111111222222222222333333333333";
mTvContent.setText(content);
}
}
总的来说模板方法模式是一种简单的但是使用场景较多的设计模式
网友评论