行为型(二) - 模板模式

一、概念

模板模式(Template Pattern):模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。

二、实现

这里举一个考试出试卷的例子,假设一个科目的试卷题型相对固定,选择、简答、论述,每次出题都是这几种类型。而这个科目每个月都要出一张试卷进行考试。

1、模板接口,producePaper设计为final,避免子类重写。

public abstract class TestPaper {
    abstract void choiceQuestion();
    abstract void shortAnswerQuestion();
    abstract void essayQuestion();

    public final void producePaper() {
        choiceQuestion();
        shortAnswerQuestion();
        essayQuestion();
    }
}

2、子类实现

#JanuaryPaper 
public class JanuaryPaper extends TestPaper {
    @Override
    void choiceQuestion() {
        System.out.println("月考:一月份考试-选择题");
    }

    @Override
    void shortAnswerQuestion() {
        System.out.println("月考:一月份考试-简答题");
    }

    @Override
    void essayQuestion() {
        System.out.println("月考:一月份考试-论述题");
    }
}

#FebruaryPaper
public class FebruaryPaper extends TestPaper {
    @Override
    void choiceQuestion() {
        System.out.println("月考:二月份考试-选择题");
    }

    @Override
    void shortAnswerQuestion() {
        System.out.println("月考:二月份考试-简答题");
    }

    @Override
    void essayQuestion() {
        System.out.println("月考:二月份考试-论述题");
    }
}

3、测试类

public class Client {
    public static void main(String[] args) {
       JanuaryPaper januaryPaper = new JanuaryPaper();
        januaryPaper.producePaper();
        System.out.println("---------------------");
        FebruaryPaper februaryPaper = new FebruaryPaper();
        februaryPaper.producePaper();
    }
}

4、运行结果
模板结果.png

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

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

相关文章

Matlab使用

Matlab使用 界面介绍 新建脚本:实际上就是新建一个新建后缀为.m的文件 新建编辑器:ctrlN 打开:打开最近文件,以找到最近写过的文件 点击路径,切换当前文件夹 预设:定制习惯用的界面 常见简单指令 ;…

一体全栈、开箱即用!麒麟信安与灵雀云携手打造“操作系统+云平台”联合解决方案

近日麒麟信安与北京凌云雀科技有限公司(以下简称“灵雀云”)开展生态合作,共同完成了灵雀云企业级全栈云原生平台ACPV3与麒麟信安操作系统V3等系列产品的兼容性认证测试。基于双方产品兼容性良好、稳定运行、性能表现卓越,麒麟信安…

工业类LMQ61460AASRJRR,汽车类LMQ61460AFSQRJRRQ1、LMQ61460AASQRJRRQ1 6A、降压转换器简化原理图

一、LMQ61460AASRJRR器件概述: LMQ61460 是一款具有集成旁路电容器的高性能直流/直流同步降压转换器。该器件具有集成式高侧和低侧MOSFET,能够在 3.0V 至 36V 的宽输入电压范围内提供高达 6A 的输出电流;可耐受 42V 电压,简化了输…

Spring Boot

前言 什么是Spring Boot?为什么要学Spring Boot? Spring 的诞⽣是为了简化Java 程序的开发的,⽽Spring Boot 的诞⽣是为了简化Spring 程序开发 的。Spring就像汽车,相比以前人只能其自行车走路,汽车可以帮助人们更快…

cad图怎么转换成pdf格式?一招教你轻松转换

将CAD文件转换成PDF格式有很多优势。首先,PDF格式是一种非常流行的文件格式,几乎所有电脑上都可以打开。这意味着即使将PDF文件发送给其他人,他们也可以轻松地查看文件,此外,PDF格式可以保留CAD文件的图形和布局&#…

Vue开发中如何解决国际化语言切换问题

Vue开发中如何解决国际化语言切换问题 引言: 在如今的全球化时代,应用程序的国际化变得越来越重要。为了让不同地区的用户能够更好地使用应用程序,我们需要对内容进行本地化,以适应不同语言和文化环境。对于使用Vue进行开发的应用…

【自适应稀疏度量方法和RQAM】疏度测量、RQAM特征、AWSPT和基于AWSPT的稀疏度测量研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

软件测试报告:包含哪些内容?

软件测试报告的内容 软件测试报告通常包括以下内容: 1、项目背景:介绍测试报告的编写目的、测试系统名称、测试环境和用到的专业术语。 2、需求内容:罗列该项目的测试功能点,具体到每个模块功能,以新增的功能和修改的功能为主&…

【excel密码】如何禁止移动、删除excel工作表?

想要工作表不被他人移动、删除等操作,该如何设置?今天分享如何设置才能够禁止excel工作表移动、删除。 打开excel工作表,点击工具栏中的审阅 – 保护工作簿 点击保护工作簿之后,会有弹框出现,输入想要设置的excel密码…

Ubuntu本地快速搭建web小游戏网站,并使用内网穿透将其发布到公网上

文章目录 前言1. 本地环境服务搭建2. 局域网测试访问3. 内网穿透3.1 ubuntu本地安装cpolar内网穿透3.2 创建隧道3.3 测试公网访问 4. 配置固定二级子域名4.1 保留一个二级子域名4.2 配置二级子域名4.3 测试访问公网固定二级子域名 前言 网:我们通常说的是互联网&am…

光伏发电+boost+储能+双向dcdc+并网逆变器控制(低压用户型电能路由器仿真模型)【含个人笔记+建模参考】

MATALB代码链接:光伏发电boost十储能十双向dcdc十并网逆变器 个人笔记与建模参考请私信发送 包含Boost、Buck-boost双向DCDC、并网逆变器三大控制部分 boost电路应用mppt, 采用扰动观察法实现光能最大功率点跟踪 电流环的逆变器控制策略 双向dcdc储能系…

A. Two Semiknights Meet

题目描述 可知走法为中国象棋中的象的走法 解题思路 利用结构体来存储两个 K K K的位置 x , y x,y x,y,因为两个 K K K同时走,所以会出现两种情况 相向而行,两者距离减少 相反而行,两者距离不变 我们完全可以不考虑格子是好…

分布式 - 消息队列Kafka:Kafka 消费者消费位移的提交方式

文章目录 1. 自动提交消费位移2. 自动提交消费位移存在的问题?3. 手动提交消费位移1. 同步提交消费位移2. 异步提交消费位移3. 同步和异步组合提交消费位移4. 提交特定的消费位移5. 按分区提交消费位移 4. 消费者查找不到消费位移时怎么办?5. 如何从特定…

DSO 系列文章(2)——DSO点帧管理策略

文章目录 1.点所构成的残差Residual的管理1.1.前端残差的状态1.2.后端点的残差的状态1.3.点的某个残差的删除 2.点Point的管理2.1.如何删除点——点Point的删除2.2.边缘化时删除哪些点? 3.帧FrameHessian的管理 DSO代码注释:https://github.com/Cc19245/…

elemenPlus ElMessage 字符串如何换行问题

因为后端返回的数据是一长串,而且带有\r,\n等换行符,但是并没有生效。前端写法: // 抛出错误ElMessage.error(msg);我们知道\r,\n,\r\n 是在不同系统下的换行符的表示,但在JavaScript返回字符串中并没有生效…

ElasticSearch学习2

1、索引的操作 1、创建索引 对ES的操作其实就是发送一个restful请求,kibana中在DevTools中进行ES操作 创建索引时需要注意ES的版本,不同版本的ES创建索引的语句略有差别,会导致失败 如下创建一个名为people的索引,settings&…

SqlServer 快速数据库脚本迁移

文章目录 前言数据库脚本数据库->任务->生成脚本选择数据库对象高级 如何迁移:脚本修改 如何使用新建数据库 前言 做工业的,经常遇到内网的项目,就是数据往本地的数据库传。由于这个问题所以我们需要新建一个数据库。最合适的就是数据…

编写一个俄罗斯方块

编写俄罗斯方块 思路。 1、创建容器数组,方块, 2、下落,左右移动,旋转,判断结束,消除。 定义一个20行10列的数组表示游戏区。初始这个数组里用0填充,1表示有一个方块,2表示该方块固…

Nvidia Jetson 编解码开发(3)解决H265解码报错“PPS id out of range”

1.问题描述 基于之前的开发程序 Nvidia Jetson 编解码开发(2)Jetpack 4.x版本Multimedia API 硬件编码开发--集成encode模块_free-xx的博客-CSDN博客 通过Jetson Xavier NX 硬编码的H265发出后, 上位机断点播放发出来的H265码流, 会报“PPS id out of range” 错误 …

2023年最佳JavaScript框架:React、Vue、Angular和Node.js的比较

文章目录 React:构建用户界面的首选Vue:简单优雅的前端框架Angular:Google支持的全面框架Node.js:服务器端的JavaScript运行环境比较不同框架的优势与劣势React:Vue:Angular:Node.js&#xff1a…