博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式—模板设计模式
阅读量:3676 次
发布时间:2019-05-21

本文共 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/

你可能感兴趣的文章
静态代理模式,Thread类
查看>>
接口,创建三个类实现一个接口,静态内部类,局部内部类,匿名内部类,lamda表达式,各种实现接口的方式,函数式接口
查看>>
线程的五大状态,继承Runnable接口重写run方法,线程的停止
查看>>
多线程休眠
查看>>
线程礼让yield,获取线程名方法,多线程的创建示范,
查看>>
线程强制执行join
查看>>
观测线程状态
查看>>
线程的优先级,对象创建线程new的是继承Runnable接口的类
查看>>
守护线程,用户线程
查看>>
线程同步机制,多个线程访问同一个对象,并发,排它锁
查看>>
SVN(subversion)及其使用
查看>>
Java介绍,发展历史,Java语言的优势,Java开发什么软件,Java用到的术语JDK,JRE,JVM等,Java命令Java,javac,javados等
查看>>
JDK,JRE,JVM文件夹详解,以及三者之间的关系,main函数,配置环境变量,编译运行.java文件生成.class文件
查看>>
Java语言注释的种类及用法,注解,文档注释,方法注释
查看>>
IDEA新建project步骤,项目组成和解释
查看>>
新建第一个IDEA项目,out,分层建包,修改IDEA字体,设置自动生成注释,更改注释颜色,整体修改编码格式,设置代码首字母补全,IDEA快捷键,代码智能补全
查看>>
module下建立多个项目使其处于并列状态,项目分层
查看>>
Java中的数据类型(四类八种),变量定义规则,新建类的规则,局部变量,全局变量,单字符类型的定义
查看>>
变量内存的存储,数据类型转换,数据类型自动转换,强制类型转换,默认数据类型转换
查看>>
运算符,复制运算符,自增,自减,++,--,==,!=,+拼接字符串,三元运算符,比较运算符
查看>>