分析模板方法设计模式
首先来看看用来比较int和String分别进行1000次运算求需要的时间进行比较,代码的实现:
package com.test;import java.util.Scanner;
//String的连接1000次
class StringOperate{private String str;public long doWork(){long begin=System.currentTimeMillis();//开始时间setStr(null);for(int i=0;i<10000;i++){setStr(getStr() + i);}long end=System.currentTimeMillis();//结束时间long time=end-begin;//时间差return time;}public String getStr() {return str;}public void setStr(String str) {this.str = str;}
}
class IntOperate{private int num=0;public long doWork(){long begin=System.currentTimeMillis();for (int i = 0; i < 10000; i++) {setNum(getNum() + i);}long end=System.currentTimeMillis();long time=end=begin;return time;}public int getNum() {return num;}public void setNum(int num) {this.num = num;}
}
//模板方法设计模式
class TemplateMethosDemo{}
public class Main{private static Scanner sc;public static void main(String[] args){//统计String连接10000次此时和int相加的时间差StringOperate st=new StringOperate();System.out.println(st.doWork());IntOperate in=new IntOperate();System.out.println(in.doWork());}
}
通过上述代码我们可以看出即使我们实现了上述的功能,但是代码不仅执行的效率低而且代码重复冗余,于是想到利用模板设计方法来实现:
package com.test;import java.util.Scanner;
//模板方法设计模式
abstract class AbstractOperateTimeTemplate{//模板方法:总体算法的骨架,子类不能修改算法的结构因此用finalfinal public long getTotalTime(){long begin=System.currentTimeMillis();//开始时间//具体操作(留给子类去完成),先调用子类中的再调用父类中的方法this.doWork();long end=System.currentTimeMillis();//结束时间long time=end-begin;return time;}//只能之类修改protected abstract void doWork();
}
//String的连接1000次
class StringOperate extends AbstractOperateTimeTemplate{public void doWork(){String str="";for(int i=0;i<10000;i++){str+=i;}}}
class IntOperate extends AbstractOperateTimeTemplate{public void doWork(){int num=0;for(int i=0;i<1000000;i++){num+=i;}}
}public class Main{public static void main(String[] args){//统计String连接10000次此时和int相加的时间差System.out.println(new StringOperate().getTotalTime());System.out.println(new IntOperate().getTotalTime());}
}
上述代码中doWork()也叫钩子函数(回调函数)。
分析模板方法设计模式相关推荐
- 23种设计模式之 : 模板方法设计模式
23种设计模式之 : 模板方法设计模式 每博一文案 青年,青年!无论受怎样的挫折和打击,都要咬着牙关挺住,因为你们完全有机会重建生活:只要不灰心丧气,每一次挫折就只不过是通往新境界的一块普通绊脚石,而 ...
- 模板方法设计模式(详解加案例)
模板方法设计模式 抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展.改造,但子类总体上会保留抽象类的行为方式. 解决的问题: 当功能内部一部分实现是确定的 ...
- 模板方法设计模式与策略模式
2019独角兽企业重金招聘Python工程师标准>>> 一.Java继承 缺点: 1.耦合性太强,容易破坏封装性,比如空实现之类的: 2.不好多继承: 3.为了扩展会多重继承,导致代 ...
- OGRE分析之设计模式
这段时间静下心来看了一下OGRE的源代码,有一点心得,于是写下来形成如下的几篇零散的文章: 阅读 OGRE分析之设计模式(四) 摘要:Iterator Observer Strategy Te ...
- java 模板方法设计模式_Java中的模板方法设计模式
java 模板方法设计模式 模板方法是一种行为设计模式 ,用于创建方法存根并将某些实现步骤推迟到子类. 模板方法定义了执行算法的步骤,它可以提供默认实现,该实现对于所有或某些子类可能是通用的. 让我们 ...
- 通过在Chipotle用餐了解模板方法设计模式
by Sihui Huang 黄思慧 通过在Chipotle用餐了解模板方法设计模式 (Understanding the Template Method design pattern by eati ...
- 详解模板方法设计模式
分享一波:程序员赚外快-必看的巅峰干货 概念 定义一个操作中的算法骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的重复代码全部在父类里面,不同业务的,使用抽象 ...
- 行为设计模式 - 模板方法设计模式
模板方法设计模式 模板方法是一种行为设计模式.模板方法设计模式用于创建方法存根,并将一些实现步骤推迟到子类. 目录[ 隐藏 ] 1模板方法设计模式 1.1模板方法抽象类 1.2模板方法具体类 1.3模 ...
- java漂亮的模板设计代码_JAVA模板方法设计模式——Java设计模式,写漂亮的代码——...
Java设计模式,写漂亮的代码 ----模板方法设计模式 简介: 模板方法设计模式是Java设计模式中很简单.应用非常广泛的的一种设计模式,该模式体现了编程的抽象思想(抽象是所有子类的共性封装), 仅 ...
最新文章
- 赠书 | 实现病人数据自动分析建模,Python能做的比你想象得更多
- Appium自动化测试-iOS真机运行
- jfinal上传图片,生成日期文件夹,图片重命名
- 判断pc浏览器和手机浏览器方法
- 空调恶搞工具小程序版源码下载
- 数据结构和算法分析英语生词整理
- python scrapy框架df_Python - Scrapy 框架
- 关于if...else语句的小注意
- led拼接屏报价_液晶拼接屏报价大概多少钱一套?
- 小白转行学IT该怎么选择领域?
- Typora使用总结
- Scala基础知识(个人总结)
- 用ps做个一寸的照片
- 拉格朗日乘子法、KKT条件、拉格朗日对偶性
- 审查指南关于计算机可读介质,中美专利申请中对“计算机可读介质”的可专利性差异...
- Linux命令行终端提示符修改
- sql横着连接起来sql_SQL联接
- Exact Audio Copy
- 游戏制作-联网对战丛林战争制作笔记(一)
- 如何应对用智行火车票购买机票后的高额退改手续费???
热门文章
- linux+mysql登录日志_Linux查看登录日志
- 敏捷软件开发宣言–Manifesto for Agile Software Development
- c# 结构体 4字节对齐_【专题4:平时遇到的问题】 之 【3.由结构体字节对齐引发的通信故障】...
- 冒泡和快速排序的时间复杂度_八大排序算法性能分析及总结
- pythonstdin_如何写入Python子进程'stdin?
- hough变换连接边缘matlab,边缘检测与Hough变换实验报告 Matlab - 图文
- 配置DNS服务器的需要修改的配置文件为,dns服务器配置教程
- php ajax 加载列表,Ajax点击不断加载数据列表(图文教程)
- lichee linux nfs,SPI Flash 系统编译
- 泊松分布的分布函数_《可靠性设计》——常用的概率分布