抽象类的使用—模板设计模式 Java

模板设计模式

  • 一、引入
  • 二、改进

一、引入

需求
① 有多个类,完成不同的任务 job
② 要求统计得到各自完成任务的时间
③ 请编程实现

=>最容易想到的方法,写类,统计时间
AA BB中的 job 方法中是有重复的。
=>改进1:每个类中,提取重复的部分为单独的方法
=>改进2:提取各个类中的重复部分,为抽象类(父类)

public class TestTemplate {public static void main(String[] args) {AA aa = new AA();aa.job();BB bb = new BB();bb.job();}
}class AA {//计算任务 1+···public void job() {// java.lang包,System类中有currentTimeMillis// static long currentTimeMillis()// 返回当前时间(以毫秒为单位)int num = 0;long start = System.currentTimeMillis();for (int i = 0; i < 1000000; i++) {num += i;}long end = System.currentTimeMillis();System.out.println("AA 执行时间="+(end-start)+"毫秒");}
}class BB {public void job() {// java.lang包,System类中有currentTimeMillis// static long currentTimeMillis()// 返回当前时间(以毫秒为单位)long num = 0;long start = System.currentTimeMillis();for (int i = 0; i < 60000; i++) {num *= i;}long end = System.currentTimeMillis();System.out.println("BB 执行时间="+(end-start)+"毫秒");}
}

在这里插入图片描述

改进1 :
class X {public void calculateTime() {//计算开始时间job();//不同的类,job不同//计算结束时间}public void job() {//不同的类,job不同}
}

二、改进

设计一个抽象类(Template),能完成如下功能:

  1. 编写方法 calculateTime(),可以计算某段代码的耗时时间。
  2. 编写抽象方法 job()。
  3. 编写一个子类Sub迷承抽象类Template,并实现code方法。
  4. 编写一个测试类TestTemplate,看看是否好用。
	AAA aaa = new AAA();aaa.calTime();
	abstract class Template {public abstract void job();public void calTime() {long start = System.currentTimeMillis();job();//调用了抽象方法long end = System.currentTimeMillis();System.out.println("执行时间="+(end-start)+"毫秒");}}//这里因为同个包下类名不能相同class AAA extends Template {public void job() {// AAA的job}}

aaa.calTime();执行流程,先找到父类的calTime,在该函数执行的过程中遇见了抽象方法 job,因为是动态绑定,所以会去找本类中的 job,job执行完之后,又回到父类的calTime。

本笔记是对韩顺平老师的Java课程做出的梳理。方便本人和观看者进行复习。
课程请见: https://www.bilibili.com/video/BV1fh411y7R8/?spm_id_from=333.999.0.0&vd_source=ceab44fb5c1365a19cb488ab650bab03

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/223347.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】继承(下) 单继承 | 多继承 | 菱形继承 | 继承和组合

一、单/多/菱形继承 1.单继承 当一个子类只有一个直接父类时&#xff0c;称这个继承关系为单继承。 2.多继承 一个子类有两个或以上直接父类时称这个继承关系为多继承。 举个实例&#xff1a;新老师进学校工作时&#xff0c;一般会作为助教老师&#xff0c;一边代课教书&am…

Rust内存布局

题图忘了来自哪里.. 整型,浮点型,struct,vec!,enum 本文是对 Rust内存布局 的学习与记录 struct A { a: i64, b: u64,}struct B { a: i32, b: u64,}struct C { a: i64, b: u64, c: i32,}struct D { a: i32, b: u64, c: i32, d: u64,}fn main(…

达索系统3DEXPERIENCE WORKS 2024电磁仿真功能

在设计工作中&#xff0c;将复杂的模型进行网格分割是必不可少的一步&#xff0c;这样可以化繁而简&#xff0c;也可以让后续的工作更容易开展。 电磁仿真可帮助您在复杂、嘈杂的电磁环境中提高效率&#xff0c;在确保兼容性的同时&#xff0c;保障出众性能。 一系列专用求解器…

MySQL(免密登录)

简介: MySQL免密登录是一种允许用户在没有输入密码的情况下直接登录到MySQL服务器的配置。这通常是通过在登录时跳过密码验证来实现的。 1、修改MySQL的配置文件 使用vi /etc/my.cnf&#xff0c;添加到【mysqld】后面 skip-grant-tables #配置项告诉mysql跳过权限验证&#…

论文阅读:“Model-based teeth reconstruction”

文章目录 AbstractIntroductionTeeth Prior ModelData PreparationParametric Teeth Model Teeth FittingTeeth Boundary Extraction Reference Abstract 近年来&#xff0c;基于图像的人脸重建方法日趋成熟。这些方法可以捕捉整个面部或面部特定区域&#xff08;如头发、眼睛…

Go 中切片(Slice)的长度与容量

切片长度与容量在 Go 中很常见。切片长度是切片中可用元素的数量&#xff0c;而切片容量是从切片中第一个元素开始计算的底层数组中的元素数量。 Go 中的开发者经常混淆切片长度和容量&#xff0c;或者对它们不够了解。理解这两个概念对于高效处理切片的核心操作&#xff0c;比…

Linux git

1.Git 初识 不知道你⼯作或学习时&#xff0c;有没有遇到这样的情况&#xff1a;我们在编写各种⽂档时&#xff0c;为了防止文档丢失&#xff0c;更改失误&#xff0c;失误后能恢复到原来的版本&#xff0c;不得不复制出⼀个副本&#xff0c;⽐如&#xff1a; “报告-v1”? …

带你用uniapp从零开发一个仿小米商场_10. 首页开发

图标菜单栏开发 轮播图开发完成后,就是图标菜单栏了 可以看出这些图标都是一样的样式,所以可以勇哥flex布局让他们每个占百分之20 代码如下,既然都是一样的那就直接用个循环嵌套一下 data数据如下 同样,为了能让这段代码能在别的地方也用到,我直接把它封装成组件 <templ…

多模态融合16篇优质论文及代码合集,含2023最新

多模态融合是多模态学习领域的基础问题&#xff0c;也是多模态研究中非常关键的研究点。它旨在从多个模态&#xff08;例如语音、图像、文本等&#xff09;中提取有价值的信息和特征&#xff0c;并将这些信息融合在一起以提高系统的性能。这一领域的研究内容广泛&#xff0c;包…

【Java并发】聊聊不安全的HashMap以及ConcurrentHashMap

在实际的开发中&#xff0c;hashmap是比较常用的数据结构&#xff0c;如果所开发的系统并发量不高&#xff0c;那么没有问题&#xff0c;但是一旦系统的并发量增加一倍&#xff0c;那么就可能出现不可控的系统问题&#xff0c;所以在平时的开发中&#xff0c;我们除了需要考虑正…

室内定位(WiFi/UWB/蓝牙等)技术方案概述

室内无法搜索到卫星&#xff0c;这样常规的GPS/北斗定位都无法使用&#xff0c;常规免费的只有运营商的基站定位LBS&#xff0c;但这个精度实在太差&#xff0c;一般都有几十米到几百米的偏差。因此&#xff0c;室内定位一直是个老大难问题。 截至目前&#xff0c;业界比较成熟…

【JMeter】运行方式

第一种&#xff1a; 使用GUI 操作&#xff1a; 在JMeter界面菜单导航上点击运行按钮 一般用作创建TestPlan和调试脚本增加java堆空间来满足测试环境 第二种&#xff1a;使用CLI(Command Line) 性能测试一般请求量比较大&#xff0c;为了节省资源 CLI参数用法&#xff1a; 字段…