1. 什么是模板模式?
1.1 什么是模板?
模板,就是方案的固定格式,一般都要遵循这么个步骤去干。比如你请假,你需要 填写请假条,领导1签字、领导2签字,这么三个步骤。这个就叫模板,就是这么一个固定的流程。具体你请假条写的啥,这个不关心。
1.2 什么是模板模式
在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。(这句话来自菜鸟教程)
说白了:我感觉,只要是一个抽象类里面定义了一个抽象方法,并且还使用了此方法。然后此方法由子类去实现了。
这样的都算模板模式。
1.2 模板模式的意图
定义一个操作中的算法的骨架模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
说白了就是,一个抽象类定义一个模板,也就是定义一个结构。某些步骤的内容确定不了的,由其子类实现,这个抽象类不管。
1.3 模板模式的优点
- 封装不变部分,扩展可变部分。
- 提取公共代码,便于维护。
- 行为由父类控制,子类实现。
1.4 模板模式的确定
- 类数目的增加。
- 间接地增加了系统实现的复杂度。
- 继承本身的缺点
2. 例子
2.1 例子介绍
测试一个方法的执行时间
2.2 代码
2.2.1 Template 抽象类
package template;
public abstract class Template {
/**
* 计算 某个方法执行的时间
*/
protected void calculateExecuteTime() throws Exception {
// 1.获取开始时间
Long startTime = this.getCurrentTime();
// 2. 需要测试的方法。 子类来实现。这里体现了模板模式
method();
// 3. 获取结束方法
Long endTime = this.getCurrentTime();
// 4. 打印时间
System.out.println(endTime - startTime);
}
/**
* 此方法子类来实现
* @throws Exception
*/
abstract void method() throws Exception ;
/**
* 获取开始时间
* 此方法子类不能重写
*/
final Long getCurrentTime() {
return System.currentTimeMillis();
}
}
2.2.2 Template 的实现类
package template;
public class TemplateTest extends Template {
@Override
void method() throws Exception {
// 方法调用
System.out.println("slkdfjslkjdflksjd fl");
}
}
2.2.3 调用
@Test
public void test() throws Exception {
TemplateTest templateTest = new TemplateTest();
templateTest.calculateExecuteTime();
}
3. 总结
这个设计模式的思想还是比较简单的。最主要的还是要融汇贯通。或许大家就在平常中使用了,但是还是没有意识到。