1.什么是模板模式?
模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。
2.模板模式的构成
1)角色1
抽象模板要定义三种方法.
1.抽象方法 子类必须去实现。
2.扩展方法,是一个空方法 子类可以复写 也可以不复写。
3.私有的最终方法,不可以被复写。
4.最后,模板方法,这个方法定义了每一个方法的执行顺序和逻辑。
2)角色2
具体模板要
1.继承抽象模板
2.实现抽象方法
3.根据需要重写扩展方法
3.应用:
比如我们要计算一个函数的运行时间,我们就可以把这个函数延伸到子类中去实现,而在父类中去计算运行的时间,这样我们就可以根据需要计算任意函数的运行时间 只需要不容的子类去继承。
/*
* 抽象模板
*/
abstract class CalTimeAbsTemplate{
/*
* 必须要实现的一个业务方法
*/
public abstract void doJob();
/*
* 定义一个可以重写也可以不重写的方法
*/
public void hookMethod() {
System.out.println("程序开始运行");
}
/**
* 必须不能被重写的而方法
*/
public final long concreateMethod() {
long currentTime = System.currentTimeMillis();
return currentTime;
}
/**
* 模板方法 供其他类来使用
*/
public long templateMethod() {
//获得doJob执行前的时间
long startTime = concreateMethod();
doJob();
long endTime = concreateMethod();
return endTime-startTime;
}
}
/*
* 具体的模板
*/
class ContrateTemplate extends CalTimeAbsTemplate{
public void doJob() {
/*
* 实现具体的业务逻辑
*/
for(int i=0;i<10;i++) {
System.out.println("程序正在运行"+i+"%");
}
}
//hookMethod() 根据要求选择是否重写
public void hookMethod() {
System.out.println("方法被重写");
}
}
public class Demo2 {
public static void main(String[] args) {
ContrateTemplate ct = new ContrateTemplate();
long doTime = ct.templateMethod();
System.out.println("程序的运行时间:"+doTime);
}
}
借鉴腾讯课堂相关视频。