Java进阶学习笔记14——模板方法设计模式

面试和看源码。

谈到设计模式:

1、解决了什么问题?

2、怎么写?

模板方法设计模式解决了什么问题?

解决方法中存在重复代码的问题。

写法:

1)定义一个抽象类:

2)在里面定义两个方法:

1> 一个是模板方法,把相同的代码放进去;

2> 一个是抽象方法,具体实现交给子类完成;

People类:

package cn.ensource.d6_abstact_template;public abstract class People {// 设计模板方法设计模式// 1. 定义一个模板方法出来public void write() {System.out.println("====我的爸爸====");System.out.println("我的爸爸好牛啊~");
//        System.out.println("我的爸爸特别牛,开车都不开红绿灯!");// 模板方法其实也不清楚正文部分到底应该是怎么写?但是它知道子类必须写的。System.out.println(writeMain());System.out.println("有这样的爸爸太好了!");}// 3. 设计一个抽象方法,具体的实现交给子类来完成public abstract String writeMain();
}

Teacher类:

package cn.ensource.d6_abstact_template;public class Teacher extends People {@Overridepublic String writeMain() {return "我的爸爸特别牛,让我站在这里别走,他去买个橘子!";}
}

Student类:

package cn.ensource.d6_abstact_template;public class Teacher extends People {@Overridepublic String writeMain() {return "我的爸爸特别牛,让我站在这里别走,他去买个橘子!";}
}

测试类:

package cn.ensource.d6_abstact_template;public class Test {public static void main(String[] args) {// 目标:搞清楚抽象类的应用场景,设计模板方法模式// 场景:学生和老师都要写一篇作文:我的爸爸// 第一段是一样的// 正文部分自由发挥// 最后一段也是一样的Teacher t = new Teacher();t.write();Student s = new Student();s.write();}
}

多学一招:

建议使用final关键字修饰模板方法,为什么?

模板方法,禁止子类再去方法重写,防止失效。

模板方法设计模式解决了什么问题?

解决了方法中存在重复代码的问题。

模板方法设计模式应该怎么写?

定义一个抽象类;

在里面定义2个方法,一个是模板方法,放相同的代码,一个是抽象方法:具体实现交给子类完成。

模板方法建议使用什么关键字修饰?为什么?

final,不再让子类方法重写@override。

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

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

相关文章

JAVA面试题大全(十五)

1、Zookeeper 是什么? zookper是一个分布式的,开放源码的分布式应用程序协调服务。是 google chubby 的开源实现,是 hadoop 和 hbase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护…

C# 控制台应用模板可生成顶级语句

C# 控制台应用模板可生成顶级语句 项目2024/01/0810 个参与者 反馈 本文内容 使用新的程序样式隐式 using 指令全局 using 指令使用旧程序样式 从 .NET 6 开始,新 C# 控制台应用的项目模板在 Program.cs 文件中生成以下代码: C#复制 // See https…

C++ prime 第五版 第14章 重载运算与类型转换

一、基本概念 重载的运算符是具有特殊名字的函数:它们的名字由关键字operator和其后要定义的运算符号共同组成。和其他函数一样,重载的运算符也包含返回类型、参数列表以及函数体。 我们不能为内置类型的运算对象重定义运算符。对于一个运算符函数来说&…

某方protobuf闲谈

问题 当我们去看某方的时候,搜索了关键词svm,然后通过抓包查看,请求的Request Payload是一串看不懂的乱码,并且返回的数据也大部分是乱码 观察请求的Content-Type是application/grpc-web+proto,没错数据的传输是protobuf的形式了 protobuf的相关概念和原理,网上有很多教…

vulhub——Aria2、bash、catic

文章目录 一、Aria2 任意文件写入漏洞二、CVE-2014-6271(Bash Shell 漏洞)三、CVE-2022-46169(Cacti 前台命令注入漏洞) 一、Aria2 任意文件写入漏洞 Aria2是一个命令行下轻量级、多协议、多来源的下载工具(支持 HTTP…

conda create,conda:未找到命令,ubantu添加环境变量,make工具是什么,docker工具什么,

目录 conda create -n flock_client python==3.11 conda:未找到命令,ubantu添加环境变量 添加conda到系统路径

docker-compose 搭建 单机版ELK

docker-compose 搭建 单机版ELK 前言 本次部署将使用ElasticSearch官方的镜像和Docker-Compose来创建单节点的ELK,用于学习ELK操作。在k8s集群内,如果每天的日志量超过20G以上,建议部署在k8s集群外部,以支持分布式集群的架构。在…

Flutter 中的 RepaintBoundary 小部件:全面指南

Flutter 中的 RepaintBoundary 小部件:全面指南 在Flutter的高性能渲染体系中,RepaintBoundary是一个重要的优化工具。它允许开发者将复杂的组件分割成独立的部分,以减少不必要的重绘,从而提高应用的性能。本文将提供RepaintBoun…

11|数据库编程:包括数据库的基本概念,JDBC的使用,数据库连接池的实现,Hibernate和MyBatis的应用等。

数据库基本概念 想象你有一个装满宝藏的箱子,里面放着各种宝贝,但这些宝贝都按照一定规则摆放。数据库就像是这样一个箱子,但它存放的是信息,比如姓名、年龄、电子邮件等。它帮我们有条理地管理数据,让我们可以方便地…

【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第26节-内嵌blender展厅

【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第26节-内嵌blender展厅 使用dtns.network德塔世界(开源的智体世界引擎),策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界…

python操作rabbitmq的consumer,并强制关闭特定consumer的连接

引入 python获取指定队列的consumer python可以使用rabbitmq_management的api获取所有consumer的信息。【队列需要安装rabbitmq_management,在大部分情况下,我们安装队列的同时,都会安装管理界面,以方便一些简单的手动操作与简单…

网络编程的基础知识(适合新手)

网络编程 在Java中,网络编程是指使用Java语言进行网络通信的编程技术。这种技术使得位于不同地理位置的计算机能够通过网络进行通信,实现资源共享和信息传递。 一、定义 Java网络编程是Java语言在网络通信方面的应用,它利用Java提供的网络…

位带操作 Bit-band

位带操作(Bit-banding)的特性是ARM Cortex-M微控制器中一个非常有用的功能,其目的是提供一种简便的方法来访问和操作存储器中单个位的状态。位带操作能够使程序员能够以原子操作(即不可中断的操作)的方式读取和写入单个…

Flutter 中的 DateRangePickerDialog 小部件:全面指南

Flutter 中的 DateRangePickerDialog 小部件:全面指南 在 Flutter 应用开发中,日期和时间的选择是一项常见的用户交互需求。DateRangePickerDialog 是一个方便的小部件,它提供了一个对话框界面,允许用户选择日期范围。这个小部件…

前端-全局样式

当我们有一个样式需要全局引用的时候,我们首先新建一个global.scss的样式文件,这里我举例一下 html, body {margin: 0;height: 100%;width: 100%;#app {height: 100%;} }然后在我们的main.ts 文件中 声明,这样的话我们整个项目都能用到这个样…

重开之数据结构(二刷)

引言: 由于前段时间学习效率不高,导致后面复习前面数据结构没有一个大纲,因此打算重新来学习以下数据结构,期望再次把数据结构学透,并有深刻的印象.并且记录每一次的学习记录 以便于后续复习 二分查找 需求:在有序数组arr内,查找target值 如果找到返回索引位置如果找不到返回…

c++(一)

c&#xff08;一&#xff09; C与C有什么区别命名空间使用 输入输出流引用指针和引用的区别定义拓展 函数重载例子测试函数重载原理 参数默认值什么是参数默认值注意 在c中如何引入c的库动态内存分配new、delete与malloc、free的区别&#xff1f; C与C有什么区别 <1>都是…

Introduction of Internet 计算机网络概述

计算机网络的概念 计算机网络的定义&#xff1a; 多台独立的计算机通过通信线路实现资源共享的计算机系统 计算机网络的组成 资源子网&#xff1a;提供共享的软件资源和硬件资源 通信子网&#xff1a;提供信息交换的网络结点和通信线路 计算机网络类型 按照拓扑排序 星型…

【STM32】计算定时器的溢出

TIM2、3、4、5、12、13、14在APB1上&#xff0c;最大计数频率84M。 TIM1、8、9、10、11在APB2上&#xff0c;最大计数频率168M。 time(arr1)/(prescale1)/Tclk 算出来的是秒 下图使用TIM14 84MHz 那么time33600*25000/8400000010S&#xff0c;10S进入一次中断 中断方式开…

基于STM32+NBIOT(BC26)设计的物联网观赏鱼缸

文章目录 一、前言1.1 项目介绍【1】开发背景【2】项目实现的功能【3】项目模块组成 1.2 设计思路 二、(硬件控制端)硬件选型2.1 STM32开发板2.2 PCB板2.3 USB下载线2.4 NBIOT模块2.5 杜邦线&#xff08;2排&#xff09;2.6 稳压模块2.7 电源插头2.8 水温检测传感器2.9 水质检测…