本文共 1842 字,大约阅读时间需要 6 分钟。
前面我已经盘点过一个设计模式“单例设计模式”,今天我们再来盘点一个设计模式"模板设计模式",该设计模式就如字面意思一样,模版!那么模版是什么了?
我记的我小时候一到夏天的时候天天都会跑去小商铺买一种雪糕,5毛钱2个,相信大家都应该吃过,该雪糕的做法其实就是将一些糖水放进一个模具里面,然后制冷就做出来了,如果你西瓜味的糖水出来的就是西瓜味的雪糕,这里的模具就是模板,你放什么东西进去就好出什么相符合的东西。
下面我需要完成一个需求,做出一个能计算程序运行时间的功能。
class Test { public static void main(String[] args) { time(); } public static void time(){ long a =System.currentTimeMillis();//该方法是记录当前时间,需要注意的是该放手返回是以毫秒返回 for (int i =0;i<1000 ;i++ ) { System.out.println(i); } long w =System.currentTimeMillis();//记录程序结束时间 System.out.println("毫秒:"+(w-a)); } }
上面的写法是完成了计算程序运行的时间,但是这个代码过于死板,子限定了计算for的运行时间,下面我们利用java的继承特性来优化的。
class TimeDemo { public void time(){ long a =System.currentTimeMillis();//该方法是记录当前时间,需要注意的是该放手返回是以毫秒返回 for (int i =0;i<1000 ;i++ ) { System.out.println(i); } long w =System.currentTimeMillis();//记录程序结束时间 System.out.println("毫秒:"+(w-a)); } } class Accede extends TimeDemo/ { public void time(){ //重写该方法 long a =System.currentTimeMillis(); for (int i =0;i<10 ;i++ ) { for (int j=0;j<1000 ;j++ ) { System.out.println(j); } } long w =System.currentTimeMillis();//记录程序结束时间 System.out.println("毫秒:"+(w-a)); } } class Test { public static void main(String[] args) { new Accede().time(); } }
以上这个代码重写了父类的time方法,提高了灵活性,但是又出现一个问题,代码重复性过高,复用性地下,现在我们用模板的方法来看看。
abstract class TimeDemo { public void time(){ long a =System.currentTimeMillis();//该方法是记录当前时间,需要注意的是该放手返回是以毫秒返回 override();//如果被继承调用的将会是子类的override();应该改方法被重写了 long w =System.currentTimeMillis();//记录程序结束时间 System.out.println("毫秒:"+(w-a)); } public abstract void override(); } class Accede extends TimeDemo { public void override(){
for (int i =0;i<5000 ;i++ ) { System.out.println(i); } } } class Test { public static void main(String[] args) { new Accede().time(); } }
如果需要计算其他代码是运行时间我们只需要修改Accede类中的override方法即可,这就是模板设计模式,简单,灵活,该模式的特性个人理解为:一段代码是确定是,确定的代码操作者一部分不确定的代码,那么将这段不确定的代码暴露出去,让其子类重写该段代码即可。
转载地址:http://cbpbn.baihongyu.com/