抽象类的使用—模板设计模式 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于单片机仿指针显示的电子时钟设计

**单片机设计介绍&#xff0c; 基于51单片机超声波测距汽车避障系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机仿指针显示的电子时钟是一种利用单片机控制器和LED或LCD显示屏幕来模拟传统时钟指针的显示效果的设计…

ubuntu下载vscode并运行程序

如有帮助点赞收藏关注&#xff01; 如需转载&#xff0c;请注明出处&#xff01; 好久没有在linux下编译c代码了&#xff0c;由于换了酷炫彩灯的电脑。又要重新安装一次喽。做个记录&#xff0c;可以帮助到有需要的人&#xff0c;接下来不要错过每一个步骤。 我们一起手把手运行…

【数据结构】顺序表---C语言版

【数据结构】顺序表 前言&#xff1a;一、线性表二、顺序表1.顺序表的概念及结构&#xff1a;2.顺序表的分类&#xff1a;3.顺序表缺陷&#xff1a; 三、顺序表的代码实现&#xff1a;1.头文件&#xff1a;2.函数文件&#xff1a;3.测试文件&#xff1a; 四、顺序表的相关OJ题&…

Unreal Engine 学习笔记 (4)—— 多方向动画

1.创建混合空间 1.设置水平方向命名为Direction表示行进方向 -45,300表示向左前方45度方向行走-90,300表示向正左方90度方向行走-135,300表示向左后方45度方向行走-180,300表示向正后方行走右侧方向动画与上述左侧使用同样方法设置Run动画与Walk动画使用同样方法设置 2. 设置…

数据库第十第十一章 恢复和并发简答题

数据库第一章 概论简答题 数据库第二章 关系数据库简答题 数据库第三章 SQL简答题 数据库第四第五章 安全性和完整性简答题 数据库第七章 数据库设计简答题 数据库第九章 查询处理和优化简答题 1.什么是数据库中的事务&#xff1f;它有哪些特性&#xff1f;这些特性的含义是什么…

Spring不再支持Java8了

在今天新建模块的时候发现了没有java8的选项了&#xff0c;结果一查发现在11月24日&#xff0c;Spring不再支持8了&#xff0c;这可怎么办呢&#xff1f;我们可以设置来源为阿里云https://start.aliyun.com/ 。 java8没了 设置URL为阿里云的地址

spring-webmvc练习-日程管理-访问后端展示列表数据

1、util/request.js import axios from "axios";let request axios.create({baseURL: "http://localhost:8080",timeout: 50000 });export default request 2、api/schedule.js import request from "../util/request.js";export let getSchedu…

【重磅】:Spring Initializer 已经不支持Java8,也就是SpringBoot2.x项目初始化

Spring Initializer 已经不支持Java8 问题描述解决方案升级java版本更换IDEA内置的Spring Initializer中 Server URL的镜像地址 问题描述 我们可以看到在IDEA内置的Spring Initializer中 Java版本选择模块已经不支持1.8了&#xff0c;同样的&#xff0c;官网也不再支持了 解决…

为何要隐藏IP地址?网络上哪些行为需要隐藏IP和更换IP?

网络已经成为现代人生活的重要组成部分&#xff0c;人们在网络上交流、学习、娱乐、购物等。但是&#xff0c;在享受网络带来的便利时&#xff0c;我们也需要时刻保护自己的隐私和安全。其中&#xff0c;IP地址作为网络通信中的重要标识&#xff0c;如何隐藏以及在哪些情况下需…

掌握反转链表的艺术:LeetCode 206 深入解析与优化 - 双指针与递归方法精讲

LeetCode.206反转链表 1.问题描述2.解题思路3.代码 1.问题描述 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a…

SpringBoot监控Redis事件通知

Redis的事件通知 Redis事件通过 Redis 的订阅与发布功能&#xff08;pub/sub&#xff09;来进行分发&#xff0c; 因此所有支持订阅与发布功能的客户端都可以在无须做任何修改的情况下&#xff0c; 使用键空间通知功能。 因为 Redis 目前的订阅与发布功能采取的是发送即忘&am…

oracle impdp 导入元数据表空间异常增大的解决办法

expdp导出的时候指定了contentsmetadata_only只导出元数据&#xff0c;但是在impdp导入到新库的时候&#xff0c;发现新库的表空间增长非常大&#xff0c;其实这个直接就可以想到&#xff0c;应该是大表的initial segment过大导致的 正常impdp&#xff0c;在执行创建表和索引的…

SocialFi 和 GameFi 的碰撞 — Socrates 构建新的 Web3 流量入口

伴随着比特币现货 ETF 即将通过 SEC 批准的消息&#xff0c;整个加密市场在11月份达到了熊市以来的新高峰。市场普遍上涨&#xff0c;新的玩法和项目不断涌出吸引了大量老用户回归以及新用户加入。加密市场经过长期的低迷&#xff0c;终于来到了牛市的起点&#xff01; 上一轮牛…

振南技术干货集:znFAT 硬刚日本的 FATFS 历险记(6)

注解目录 1、znFAT 的起源 1.1 源于论坛 &#xff08;那是一个论坛文化兴盛的年代。网友 DIY SDMP3 播放器激起了我的兴趣。&#xff09; 1.2 硬盘 MP3 推了我一把 &#xff08;“坤哥”的硬盘 MP3 播放器&#xff0c;让我深陷 FAT 文件系统不能自拔。&#xff09; 1.3 我…

正则表达式和awk

目录 一、正则表达式 1.正则表达式基本介绍 2.正则表达式分类 3.基本正则表达式分类 4.代表字符 5.表示次数 6.位置锚定 7.分组或其他 8.扩展正则表达式 二、awk 1.语法 2.选项 3.基础用法 4.内置变量 5.条件判断 6.数组 总结&#xff1a;本章主要介绍了正则表…

分享:身份证阅读器在ARM Linux系统调用libwlt2bmp.so解码库实现身份证头像解码

头像解码库&#xff1a;libwlt2bmp.so 照片文件名&#xff1a;photo.bmp 原始身份证相片数据&#xff1a;574C66007E00320000F........&#xff08;此处省略&#xff09; 调用身份证阅读器Linux开发包&#xff0c;然后调用libwlt2bmp.so解码库文件&#xff0c;传入身份证原始…

0基础学习VR全景平台篇第123篇:VR视频航拍补天 - PR软件教程

上课&#xff01;全体起立~ 大家好&#xff0c;欢迎观看蛙色官方系列全景摄影课程&#xff01; 嗨&#xff0c;大家好&#xff0c;今天我们来介绍【航拍VR视频补天】。之前已经教给了大家如何处理航拍图片的补天&#xff0c;肯定有很多小伙伴也在好奇&#xff0c;航拍的VR视频…

地图标注系统v0.10.1

微启地图标注系统 thinkphpuniapp前端&#xff0c;微信小程序已适配&#xff0c;近期更新抖音小程序和QQ小程序&#xff0c;后期上分销功能&#xff0c;标注系统用户粘性不算大&#xff0c;本着小程序用完即走的理念&#xff0c;暂时没打算适配安卓和iOS 主要功能 用户端&am…

移动安全威胁:今天和明天的危险

随着技术的发展&#xff0c;个人和公司的设备、数据和隐私所面临的威胁也在发生变化。在本文中&#xff0c;我们将仔细研究当今移动设备安全面临的主要威胁&#xff0c;并共同探讨不久的将来的前景。 但首先让我们从基础开始&#xff1a;如何对移动设备发起攻击&#xff1f; …

1.ORB-SLAM3中如何保存多地图、关键帧、地图点到二进制文件中

1 保存多地图 1.1 为什么保存(视觉)地图 因为我们要去做导航&#xff0c;导航需要先验地图。因此需要保存地图供导航使用&#xff0c;下面来为大家讲解如何保存多地图。 1.2 保存多地图的主函数SaveAtlas /*** brief 保存地图* param type 保存类型*/ void System::SaveAtlas(…