模板模式

2023-10-27

简介:在模板模式中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。

主要解决:一些方法通用,却在每一个子类都重新写了这一方法。

注意:一般模板方法都加上 final 关键词。

下面的例子是关于计算代码执行时间的。如果程序中多处需要计算代码的执行时间,那么可以将这个功能抽象出来。

/**
 * 定义一个模板类,用于计算代码的执行时间
 * @author admin
 *
 */
public abstract class Code {
	public abstract void run();
	
	/**
	 * 模板类
	 */
	final public long getRunTime(){
		Long startTime=System.currentTimeMillis();
		System.err.println("开始时间是"+startTime);
		run();
		Long endTime=System.currentTimeMillis();
		System.err.println("结束时间是"+endTime);
		long time=(endTime-startTime)/1000;
		System.err.println(""+time);
		return time;
	}

}

/**
 *继承模板类,重写抽象方法。
 */
class Calculating extends Code{

	@Override
	public void run() {
		
		try {
			Thread.sleep(5000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

主方法:

public class Main {

	public static void main(String[] args) {
		synchronized (args) {
			Code calculating=new Calculating();
			long time=calculating.getRunTime();
			System.err.println("运行时间是"+time);
		}
	}
}
运行结果:
开始时间是1526350196628
结束时间是1526350201628
5
运行时间是5

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模板模式 的相关文章

  • Java EE:如何获取我的应用程序的 URL?

    在 Java EE 中 如何动态检索应用程序的完整 URL 例如 如果 URL 是 localhost 8080 myapplication 我想要一个可以简单地将其作为字符串或其他形式返回给我的方法 我正在运行 GlassFish 作为应
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 多个 Maven 配置文件激活多个 Spring 配置文件

    我想在 Maven 中构建一个环境 在其中我想根据哪些 Maven 配置文件处于活动状态来累积激活多个 spring 配置文件 目前我的 pom xml 的相关部分如下所示
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • Java TestNG 与跨多个测试的数据驱动测试

    我正在电子商务平台中测试一系列商店 每个商店都有一系列属性 我正在考虑对其进行自动化测试 是否有可能有一个数据提供者在整个测试套件中提供数据 而不仅仅是 TestNG 中的测试 我尝试不使用 testNG xml 文件作为机制 因为这些属性
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • Java Integer CompareTo() - 为什么使用比较与减法?

    我发现java lang Integer实施compareTo方法如下 public int compareTo Integer anotherInteger int thisVal this value int anotherVal an
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • 在 Mac 上正确运行基于 SWT 的跨平台 jar

    我一直致力于一个基于 SWT 的项目 该项目旨在部署为 Java Web Start 从而可以在多个平台上使用 到目前为止 我已经成功解决了由于 SWT 依赖的系统特定库而出现的导出问题 请参阅相关thread https stackove
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo

随机推荐

  • gcc生成shared library及可执行文件

    在IC验证中 复杂算法的reference model的编写比较耗费时间 通常我们会采用算法人员的matlab的算法模型或者c模型作为golden model和DUT design under test 的输出结果进行比对 验证环境通过DP
  • 第三课:C++实现PDF去水印

    目录 1 功能概述与实现方法 2 代码实现 3 代码使用方法 4 PDF加水印原理和方法 4 1 使用 优速水印工厂 给pdf加水印 4 2 使用Acrobat XI软件给pdf加水印 4 3 使用优米处理器给pdf加水印 4 4 使用云朵
  • 基于VGG16实现宝石图像分类任务(acc 84%)--paddle paddle

    作业 补充网络定义部分 使用卷积神经网络实现宝石分类 要求 1 补充完成CNN的网络结构定义方法实现宝石识别 2 可尝试不同网络结构 参数等力求达到更好的效果 卷积神经网络 卷积神经网络是提取图像特征的经典网络 其结构一般包含多个卷积层与池
  • MFC主要知识点

    WIN32 1 WM COMMAND是由菜单 加速键 工具栏按钮 按钮发出 wParam包含ID lParam包含句柄 2 LOWORD 就是取低字节的 将DWORD转成WORD 3 消息处理函数返回TRUE 表示你处理过的 return
  • 贪心算法--字典序最小的字符串

    贪心 给定一个字符串组成的数组strs 把所有的字符串拼接起来 返回所有的拼接结果中 字典序最小的结果 字典序 字符串长度相同时 当做26位的数 直接比较大小abc lt acd 字符串长度不相同时 在后面补上0 变成相同的再比较 abc
  • 用Excel求线性回归方程

    文章目录 一 何为线性回归 二 如何制作线性回归 最小二乘法 三 利用Excel求线性回归方程 操作方法 1 选择需要拟合的数据 2 点击工具栏的插入 选择插入散点图 3 在生成的表格右上角勾选上生成渐近线 4 右击生成的渐近线 选择设置渐
  • 通俗大白话,彻底弄懂 https 原理本质

    通俗大白话 彻底弄懂 https 原理本质 相信很多人 对 https 的过程弄不清楚 只是知道 https是安全加密的 背后的原理 过程并不清楚 笔者曾经也是对https的过程并不清楚 一知半解 而且最可气的是每次面试 面试官很可能就问你
  • 未来发展?智能AI革命与脑联网领域

    前言 最近在看一些关于未来技术的一些书 分享一下我的感受吧 历史革命 智能制造是国家战略的共同核心 各国都期望借助于自动化 数字化 网络化 智能化手段 减少对人的依赖 实现各自国家向高质 高效 高端 绿色 高竞争力方向发展 机械革命 第一次
  • Java最新大厂面试真题总结:怎么使用rke安装k8s集群

    阿里P8级架构师第九篇 千亿流量高并发高可用分布式系统之数据治理篇 阿里P8级架构师第十篇 千亿流量高并发高可用分布式系统之人工智能加成篇 数据融合模块 构建画像模块 召回策略模块 排序模型模块ctr预估 微服务模块 AB Test模块 S
  • 优化GitHub网站访问慢的问题

    方法一 修改host文件解决 大型网站服务器都不会是只有一台服务器 而是多台服务器组成的集群一起对外提供服务 使用站长工具测速 找一个速度比较快的服务器 图中可以看到140 82 121 4这个ip比较快 下面修改hosts Mac 在 e
  • Java 学生成绩管理系统 带详细设计报告 功能非常齐全 完整源码

    今天为大家分享一个java语言编写的学生成绩管理系统 目前系统功能已经很全面 后续会进一步完善 整个系统界面漂亮 有完整得源码 希望大家可以喜欢 喜欢的帮忙点赞和关注 一起编程 一起进步 开发环境 开发语言为Java 开发环境Eclipse
  • python实现选择排序

    排序算法 python实现基数排序 python实现归并排序 python实现交换排序 python实现选择排序 python实现插入排序 简单选择排序 基本思想 假设排序表为L 1 n 第i趟排序即从L i n 中选择关键字最小的的元素与
  • TensorFlow实现VGGNet网络模型

    1 VGGNet简介 VGGNet是牛津大学计算机视觉组和Google DeepMind公司的研究员一起研发的深度卷积神经网络 VGGNet探索了卷积神经网络的深度与其性能之间的关系 反复使用33的小型卷积核和22的最大池化层来构筑卷积神经
  • Pycharm创建项目时,解释器如何选择

    最近开始看深度学习 需要用到python 然后就安装了python Anaconda 还有编译IDE pycharm 给大家理一下关系 python就是一个解释器 用来解释程序用的 可以理解为普通C或者C语言的IDE环境 有gcc编译啊之类
  • 掌握Python的X篇_10+11_if分支语句、else语句、elif语句

    文章目录 1 if关键字及语法 2 语句块的概念 3 else语句 4 elif语句 1 if关键字及语法 基本语法如下 if 条件表达式 条件为True时 要执行的语句 举例 number int input Input an numbe
  • 给大家推荐几个查英语缩写的网站

    1 https www acronymfinder com 2 https www abbreviations com 转载于 https www cnblogs com cnwuchao p 10562539 html
  • 实验15:20211127 Java大数据1+X 中级实操考试(id:2660)

    实验15 20211127 Java大数据1 X 中级实操考试 id 2660 一 项目背景说明 二 表结构 三 步骤 5 分 步骤 1 项目准备 5 分 步骤 2 完成实体类 Student 10 分 步骤 3 完成实体类 Course
  • 构造函数不能被继承

    1 派生类不能继承基类的构造函数 必需提供自个的构造函数 防止紧耦合 继承一切成员 构造函数除外 2 析构函数同理 只是由于析构函数无参数需传递 所以似乎能合适的使用 逻辑上 提供 3 由系统隐式使用析构函数 缺省构造函数 class B
  • ubuntu Linux操作系统使用教程(学习笔记)

    本文为 Ubuntu Linux操作系统使用教程 人民邮电出版社 的个人学习笔记 第一章 系统介绍 Linux GNU GPL的关系 Linux的主要发行版本 Linux系统特性及与Windows的区别 略 第二章 系统部署 系统安装 略
  • 模板模式

    简介 在模板模式中 一个抽象类公开定义了执行它的方法的方式 模板 它的子类可以按需要重写方法实现 但调用将以抽象类中定义的方式进行 这种类型的设计模式属于行为型模式 主要解决 一些方法通用 却在每一个子类都重新写了这一方法 注意 一般模板方