模板方法设计模式(TemplateMethod)
抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展,改造,但子类总体上会保留抽象类的行为方式。
解决的问题:
- 当功能内部一部分实现是确定,一部分实现是不确定的,这时候可以把不确定的暴露出去,让子类去实现。
- 编写一个抽象父类,父类提供了多个子类的通用方法,并把一个或多个方法留给子类实现,就是一种模板模式。
具体实现:
package com.zjx.abs;
/**
* 模板方法设计模式
* 模板类:抽象父类
* 1. 实现好的方法(普通方法)
* 2. 没实现的方法(抽象方法)
* 应用类:普通之类
* 1. 实现好的方法不用改造
* 2. 实现父类抽象方法(改造)
* @author zjx
*
*/
public class TestTemplate {
public static void main(String[] args) {
//创建对象
Template template = new Son();
//调用模板方法 自动调用code 并且计算耗时
template.caleTimes();
}
}
//抽象模板父类
abstract class Template{
/**
* 计算代码的耗时时间
*/
public void caleTimes(){
//记录代码执行前距离1970-1-1 0:0:0 的时间差
long start = System.currentTimeMillis();
//具体执行的代码
code();
//代码执行后距离1970-1-1 0:0:0 的时间差
long end = System.currentTimeMillis();
//返回结果
System.out.println("code耗时:"+(end-start));
}
//具体执行的代码由子类实现
public abstract void code();
}
//具体实现应用类
class Son extends Template{
//子类实现父类的code方法
@Override
public void code() {
int sum = 0;
//循环1000万次求和
for (int i = 0; i < 10000000; i++) {
sum += i;
}
}
}