模版模式:
第一种角色:抽象模版
- 第一种方法需要子类去实现,并且必须实现;
- 第二个扩展方法,是一个空方法,子类可以去复写,也可以不去复写
- 第三个私有的最终方法,不能复写
- 第四个模版方法,这个方法中定义了每个方法的执行顺序和逻辑
- 第二种角色:具体模版要继承抽象模版,需要实现抽象模版中的抽象方法,可以扩展抽象模版中的扩展方法
以计算一个方法的运行时间为例子
/**
* 抽象模版
* @author Administrator
*
*/
abstract class CalTimeAbsTemplate_02{
/**
* 必须要实现的业务方法
*/
public abstract void doJob();
/**
* 扩展方法:可以重写也可以不重写
*/
public void hookMethod() {
}
/**
* 最终方法:必须不能被重写
*/
public final long concrateMethod() {
long current=System.currentTimeMillis();
return current;
}
/**
* 模版方法,供其他类使用
*/
public void templateMethod() {
long startTime=concrateMethod();
doJob();
long endTime=concrateMethod();
long sumTime=endTime-startTime;
System.out.println("程序一共运行"+sumTime+"ms");
}
}
/**
* 具体模版,实现具体的业务流程
* @author Administrator
*/
class ConcrateTemplate_02 extends CalTimeAbsTemplate_02{
public void doJob() {
for(int i=1;i<=1000;i++) {
System.out.println("程序运行:"+i+"%");
}
}
}
public class TemplateText_02 {
public static void main(String[] args) {
ConcrateTemplate_02 ct=new ConcrateTemplate_02();
ct.templateMethod();
}
}