标签:设计模式
模版方法模式(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);
}
}
下面为模版方法模式实例运行的结果:
好了,到这里访问者模式已经介绍完了,希望对你有帮助,另外,原创作品来之不易,转载请注明谢谢。
技术交流群:179914858
标签:设计模式
原文地址:http://blog.csdn.net/why_2012_gogo/article/details/45478413