简介:在模板模式中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。
主要解决:一些方法通用,却在每一个子类都重新写了这一方法。
注意:一般模板方法都加上 final 关键词。
下面的例子是关于计算代码执行时间的。如果程序中多处需要计算代码的执行时间,那么可以将这个功能抽象出来。
/**
* 定义一个模板类,用于计算代码的执行时间
* @author admin
*
*/
public abstract class Code {
public abstract void run();
/**
* 模板类
*/
final public long getRunTime(){
Long startTime=System.currentTimeMillis();
System.err.println("开始时间是"+startTime);
run();
Long endTime=System.currentTimeMillis();
System.err.println("结束时间是"+endTime);
long time=(endTime-startTime)/1000;
System.err.println(""+time);
return time;
}
}
/**
*继承模板类,重写抽象方法。
*/
class Calculating extends Code{
@Override
public void run() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
主方法:
public class Main {
public static void main(String[] args) {
synchronized (args) {
Code calculating=new Calculating();
long time=calculating.getRunTime();
System.err.println("运行时间是"+time);
}
}
}
运行结果:
开始时间是1526350196628
结束时间是1526350201628
5
运行时间是5