生活中我们会遇到各种各样的模板,从我们测试人员角度去看,想测试计划,测试方案包括测试用例基本都是使用一定的模板,我们只需要对模板做填充,即可完成工作,省去了每次都需要全量编辑的麻烦。。。
其实在java中也应该有这样的模板,使用起来就方便多了,
于是就有了模板模式这种编写方法:
概述:某些事情的步骤是固定的,有些是不固定的,那么我们可以为该类事情提供一个模板出来,conger提高效率
那么怎么做呢?基本上可以总结为三个步骤:
1、先写出这件事情的一种解决方案,然后我们进行改造。
2、分析代码,将不断变化的代码独立出来,单独写一个方法,注意抽象话,由程序的调用者去实现这个方法,这样相当于让用户去编辑这么个操作;
3、将这个模板方法使用final修饰,保证这个模板不会被人修改
下面就可以用一个简单的例子一步步看下怎么变化的:
我们就计算下一个简单程序的执行时间吧!
这块用到了java中System类中的currentTimeMillis()方法,用来统计当前时间戳的
第一步:写出统计时间的一种解决方法:
public class MyRuntime{ public final void getTime(){ long startTime = System.currentTimeMillis(); //记录开始的时间
//下面的while循环就是用户的实际代码,我随便写的 while(i<1000){ System.out.println("执行次数"+i); i++; } long endTime = System.currentTimeMillis(); //记录结束的时间. System.out.println("运行时间 :"+ (endTime-startTime)); } }
第二步:独立出变化的代码,并定义成一个抽象类的方法
public class MyRuntime{ public void getTime(){ long startTime = System.currentTimeMillis(); //记录开始的时间 Code(); //调用变化的代码 long endTime = System.currentTimeMillis(); //记录结束的时间. System.out.println("运行时间 :"+ (endTime-startTime)); } public abstract void code(); //定义一个抽象方法,待用户去重写 } //该类继承模板类并对用户代码进行重写,这样,用户就只需要编写这部分代码去调用模板方法了 public class Demo11 extends MyRuntime { //code是对模板类中Code方法的重写,调用者自己编辑 public void code(){ int i = 0; while(i<100){ System.out.println("i="+i); i++; } } }
第三步:使用final修饰模板方法,防止被修改
public class MyRuntime{
public final void getTime(){ //使用final修饰
long startTime = System.currentTimeMillis(); //记录开始的时间
Code();
long endTime = System.currentTimeMillis(); //记录结束的时间.
System.out.println("运行时间 :"+ (endTime-startTime));
}
public abstract void code();
}
public class Demo11 extends MyRuntime
{
//code方法内部就写要计算运行时间 的代码;
public void code(){
int i = 0;
while(i<100){
System.out.println("i="+i);
i++;
}
}
}
public class Run{
public static void main(String[] args)
{
Demo11 d = new Demo11();
d.getTime();
}
}
至此,这个完整的模板就完成并调用了一次了,以后就可以使用该方法去简化代码了。。。。