设计模式—模板设计模式

来源:互联网 发布:java爬虫技术视频教程 编辑:程序博客网 时间:2024/05/22 01:48

前面我已经盘点过一个设计模式“单例设计模式”,今天我们再来盘点一个设计模式"模板设计模式",该设计模式就如字面意思一样,模版!那么模版是什么了?

我记的我小时候一到夏天的时候天天都会跑去小商铺买一种雪糕,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方法即可,这就是模板设计模式,简单,灵活,该模式的特性个人理解为:一段代码是确定是,确定的代码操作者一部分不确定的代码,那么将这段不确定的代码暴露出去,让其子类重写该段代码即可。


0 0