Java设计模式——模板方法设计模式(abstract修饰)

解释:

一个抽象类中,有一个主方法,再定义 1...n 个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用。

解决的问题:

当功能内部一部分实现是确定,一部分实现是不确定的。这时可以把不确定的部分暴露出去,让子类去实现。

编写一个抽象父类,父类提供了多个子类的通用方法,并把一个或多个方法留给其子类实现,就是一种模板模式。

抽象类的使用:

抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留抽象类的行为方式。

示例:

/**
 * 此类用于演示模板方法设计模式
 * 
 * 模板类:(抽象父类)
 *         1、实现好的方法(普通方法)
 *         2、没有实现的方法(抽象方法)
 * 
 * 应用类:(普通子类)
 *        1、实现好的方法,不用改造
 *        2、实现父类的抽象方法(改造)
 */
public class TestTemplate {
    public static void main(String[] args) {
        
        Template t = new Sub1();
        t.caleTimes();
        
        Template t2 = new Sub2();
        t2.caleTimes();
    }

}
class Sub2 extends Template{

    @Override
    public void code() {
        String s = "hello";
        for (int i = 1; i <=50000; i++) {
            s+=i;
        }
    }
}

class Sub1 extends Template{

    @Override
    public void code() {
        long sum=0;
        for (int i = 1; i <=50000; i++) {
            sum+=i;
        }
    }
}
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("耗时:"+(end-start));
    }
    
    public abstract void code();
    
}