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(); }