01-2023年上半年软件设计师考试java真题解析

1.真题内容

在某系统中,类 Interval(间隔) 代表由下界(lower bound(边界))上界(upper bound )定义的区间。
要求采用不同的格式显示区间范围。
如[lower bound , upper bound ]、[ lower bound … upper bound ]、[ lower bou nd - upper bound ]等。
现采用策略(strategy)模式实现该要求,得到如图5-1所示的类图。
在这里插入图片描述

在这里插入图片描述

2.策略模式(strategy) 191页

策略模式(strategy):定义一系列算法,把它们一个个封装起来,并且使它们之间可以互相替换,从而让算法可以独立于使用它的用户而编号。

3.类图关系 167页

在这里插入图片描述

4.真题代码

import java.util.*;
enum TYPE { COMMA, DOTS, LINE };
interface PrintStrategy{      public (1) ;
}class Interval  {private double lowerBound;   private double upperBound;  public Interval(double p_lower, double p_upper){lowerBound = p_lower; upperBound = p_upper;}public void printInterval(PrintStrategy ptr) {(2);} public double getLower() { return lowerBound; }public double getUpper() { return upperBound; }
}class PrintIntervalsComma implements PrintStrategy{ public void doPrint(Interval val){System.out.println("[ " + val.getLower() + "," + val.getUpper()+"]");} 
}
class PrintIntervalsDots implements PrintStrategy {public void doPrint(Interval val) {System.out.println("[" + val.getLower() + "..." + val.getUpper() + "]"); }
}
class PrintIntervalsLine implements PrintStrategy {public void doPrint(Interval val) {System.out.println("[" + val.getLower() + "-" + val.getUpper() + "]");} 
}class Strategy {
public static PrintStrategy getStrategy(TYPE type) {PrintStrategy st = null;switch (type) {case COMMA: (3) break;case DOTS:(4)break;case LINE:(5)break;}return st;}
}public static void main(String[] args) {Interval a = new Interval(1.7, 2.1);a.printInterval(getStrategy(TYPE.COMMA));a.printInterval(getStrategy(TYPE.DOTS));a.printInterval(getStrategy(TYPE.LINE)); }
}

5.题目解析

由图可知,PrintStrategy(打印策略)父类,它有3个子类。
分别为PrintIntervalsComma(打印间隔逗号)、PrintIntervalsDots(打印间隔点)、PrintIntervalsLine(打印间隔线)。

通过实心的菱形箭头判断,Interval(间隔)和PrintStrategy(打印策略)有一个1对多的关系。
推测,Interval(整体)里可能会有PrintStrategy(部分)。

观察代码:
enum TYPE { COMMA, DOTS, LINE }定义了一个枚举,枚举通常是常量。

PrintStrategy父接口缺失一个方法。
父接口中缺失的方法去它的子类中寻找。
在Comma中找到public void doPrint(Interval val)方法。
3个子类都有这个方法。
因此(1)void doPrint(Interval val)

Interval类中有一个public void printInterval方法,该方法传入了一个PrintStrategy对象ptr。
那第2空就是要调ptr做事情,ptr是PrintStrategy的对象,PrintStrategy只有一个方法doPrint。
doPrint方法需要传入Interval参数,现在就在Interval中,因此用this。
(2)ptr.doPrint(this)

用父接口PrintStrategy定义了一个变量st。
父接口定义的变量肯定是要去接子对象的。
这里是null,表示一会肯定有一个意义的参数要传进来。
如果type传进来的是COMMA,则把COMMA这个儿子传给父接口st。

6.代码解析

import java.util.*;
# import 是关键字,用于导入包或类。
# java.util 是包的名称,表示我们要导入的是 java.util包。
# * 是一个通配符,表示导入该包中的所有类。enum TYPE { COMMA, DOTS, LINE };
# enum(枚举)是一种特殊的类,用于表示一组固定的常量值
# 三个枚举常量:COMMA(逗号)、DOTS(点)、LINE(线)interface PrintStrategy{  
# interface: 关键字,用于定义一个接口。
# PrintStrategyt(打印策略): 接口名。    public void doPrint(Interval val); // (1) 添加方法声明 答案在实现接口中找 # 父接口PrintStrategy中缺失的方法去它的子类中寻找。# 去class PrintIntervalsComma implements PrintStrateg找方法# 子类中只有public void doPrint(Interval val)1个方法# 因此(1)void doPrint(Interval val)# public: 这是一个访问修饰符,表示这个方法可以被任何其他类访问。# 因为interface里面的方法默认是public abstract的,因此这里public也可以省略, # void:返回类型为,表示不返回任何值。# Interval:参数类型# val:参数名# 该方法接受一个名为 val(单位)的Interval(间隔)类型的参数
}class Interval  {
# Interval:类名 private double lowerBound;  private double upperBound;  # 声明了一个名为 lowerBound 的私有成员变量。 # private:访问修饰符,表示这个变量只能在它所在的类内部访问。# 当一个类成员被声明为private时,外部类和对象无法直接访问或修改这个变量。# double是一种基本数据类型,用于表示双精度浮点数。# lowerBound(下边界) upperBound(上边界) 是私有实例变量。# lowerBound下界 upperBound上界public Interval(double p_lower, double p_upper){lowerBound = p_lower; upperBound = p_upper;}# 定义了一个构造函数,用于初始化 Interval 类的实例。# 构造函数语法示例:第一行class Person 第二行 public Person(String name) {this.name = name;}# 构造函数是一种特殊的方法,它的名字与类名相同,并且没有返回类型。# 这个构造函数允许在创建 Interval 类的实例时,通过参数直接设置 lowerBound 和 upperBound 的初始值。# 这个构造函数接收两个双精度浮点数 p_lower 和 p_upper,然后将它们分别赋值给类的成员变量 lowerBound 和 upperBound# Interval:构造函数# double p_lower, double p_upper参数列表# lowerBound、upperBound类的实例变量# p_lower、p_upper传入的参数public void printInterval(PrintStrategy ptr){ptr.doPrint(this);} // (2) 调用doPrint方法并传递当前对象# 定义一个名为 printInterval的方法,该方法接受一个PrintStrategy类型的参数ptr。# 调用该参数的 doPrint 方法,将当前对象(即 this)作为参数传递给 doPrint 方法。# printInterval方法传入了一个ptr对象,后面通常就要去调ptr的方法。# 去PrintStrategy中寻找,它只有一个方法doPrint。# doPrint需要传入Interval类型的参数。    # this 关键字引用的是当前对象,因为代码就在Interval类里。# 注意Interval val是定义的时候设置的形参,实际调用的时候用具体的数据传进去。# 当doPrint方法需要访问当前 Interval 对象的数据,可以使用this。# printInterval:方法名# PrintStrategy:参数类型# ptr:对象名# doPrint:方法名public double getLower() { return lowerBound; }public double getUpper() { return upperBound; }# public:表示该方法可以被任何其他类访问# double:这方法的返回类型,表示该方法将返回一个双精度浮点数(double)# getLower:方法的名。根据命名约定,方法名通常以小写字母开头,并使用驼峰命名法(camelCase)# 在这个例子中,getLower 暗示了这个方法的作用是获取某个值的下限(lower bound)# ():圆括号内可以包含参数列表。圆括号是空的,表示这个方法不接受任何参数# 花括号 {} 包围的方法体,包含了方法的具体实现# return lowerBound; 是方法体中的一条语句,表示返回一个名为 lowerBound 的变量的值。# 这个变量应该是在类的其他地方定义的一个成员变量     
}class PrintIntervalsComma implements PrintStrategy{ 
# 具体的实现类
# PrintIntervalsComma:类的名称。
# implements:表示一个类实现了某个接口。接口定义了一组方法,这些方法必须在实现该接口的类中被实现。
# PrintStrategy:这是接口的名称。接口是一种抽象类型,定义了一组方法,但不提供其具体实现。public void doPrint(Interval val){System.out.println("[ " + val.getLower() + "," + val.getUpper()+"]");} 
}
# doPrint:方法名。在这个例子中,doPrint 暗示这个方法的作用是执行打印操作。
# Interval:参数类型。
# val:参数名。
# doPrint方法接受一个名为 val 的参数,其类型是 Interval。# System.out.println 是一个标准输出方法,用于将文本输出到控制台。
# "[ " + val.getLower() + "," + val.getUpper()+"]" 是拼接字符串,表示要输出的内容。
# val.getLower() 调用 val 对象的 getLower 方法,获取区间的下界。class PrintIntervalsDots implements PrintStrategy {public void doPrint(Interval val) {System.out.println("[" + val.getLower() + "..." + val.getUpper() + "]"); }
}
class PrintIntervalsLine implements PrintStrategy {public void doPrint(Interval val) {System.out.println("[" + val.getLower() + "-" + val.getUpper() + "]");} 
}class Strategy {public static PrintStrategy getStrategy(TYPE type) {# getStrategy方法接受一个TYPE枚举值作为参数,并根据这个值返回相应的PrintStrategy实现类。# static:关键字,表示该方法属于类本身,而不是类的实例。静态方法可以直接通过类名调用,而不需要创建类的实例。# 如果PrintStrategy是一个工具类,你可以直接使用PrintStrategy getStrategy(type)来获取策略。# 而不需要先创建一个PrintStrategy对象。# PrintStrategy:这是方法的返回类型,表示该方法将返回一个 PrintStrategy类型的对象。# getStrategy:方法名。在这个例子中,getStrategy 表示这个方法的作用是根据传入的类型获取相应的打印策略。# TYPE:参数类型# type:参数名PrintStrategy st = null;# 声明并初始化一个名为 st 的变量。# PrintStrategy:类型声明。# PrintStrategy 是一个类或接口的名称,它表示变量 st 的类型。# 在 Java 中,类型可以是基本数据类型(如 int, double),也可以是用户定义的类或接口。# st 是变量的名称# null 是变量 st 的初始值。null 是一个特殊的字面量,表示对象引用不指向任何对象。switch (type) {# switch :控制流语句,根据变量的值执行不同的代码块。# 在这里,它基于 type 的值选择不同的分支。case COMMA: # case 关键字用于定义 switch 语句的一个分支。# 如果 type 的值是 COMMA,则执行该分支内的代码。st = new PrintIntervalsComma(); // (3) 实例化正确的类#如果 type 的值是 COMMA,则实例化一个 PrintIntervalsComma 对象,并将其赋值给 st 变量。# st是PrintStrategy类型的# PrintIntervalsComma是一个实现了 PrintStrategy接口的类# 推测(3)是要创建一个具体的实例化对象break;# break 语句用于终止当前的 case 分支,防止继续执行后续的 case 分支。       case DOTS:st = new PrintIntervalsDots(); // (4) 实例化正确的类break;case LINE:st = new PrintIntervalsLine(); // (5) 实例化正确的类break;}return st;}
}public static void main(String[] args) {
# 程序入口点Interval a = new Interval(1.7, 2.1);# 声明一个名为a的变量,其类型为 Interval。# 使用 new 关键字调用Interval类的构造函数,并传递两个参数 1.7和2.1。# 将创建的 Interval对象赋值给变量a。   a.printInterval(getStrategy(TYPE.COMMA));a.printInterval(getStrategy(TYPE.DOTS));a.printInterval(getStrategy(TYPE.LINE)); # 调用 a 对象的 printInterval 方法。# 将 getStrategy(TYPE.LINE) 的返回值作为参数传递给 printInterval 方法。# a:变量名# printInterval:方法名,用于打印区间信息。# getStrategy(TYPE.LINE)方法调用,调用 getStrategy方法,并传递 TYPE.LINE 作为参数。# 这个方法返回一个实现了某个策略接口或抽象类的实例。# TYPE.LINE: 枚举常量}
}

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

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

相关文章

svn分支相关操作(小乌龟操作版)

在开发工作中进行分支开发,涉及新建分支,分支切换,合并分支等 新建远程分支 右键选择branch/tagert按钮 命名分支的路径名称 点击确定后远程分支就会生成一个当时命名的文件夹(开发分支) 分支切换 一般在开发阶段&a…

Vue中接入萤石等直播视频(更新中ing)

一、萤石: 1. 萤石云开发文档: https://open.ys7.com/help/31 2、安装: npm install ezuikit-js --save 3、在文件中引用:import EZUIKit from ezuikit-js 4、具体代码: 获取accessToken:https://open.…

【每日学点鸿蒙知识】模拟器开启网络、长时任务、兼容性测试支持、丢帧定位、SO中访问rawfile等

1、模拟器如何开启网络? 模拟器使用的是电脑本身的网络,不通过代理即可访问网络。 2、创建子window后,锁屏很短时间内,应用会被杀死? 没开长时任务,锁屏和退后台保活要开长时任务。 应用退至后台后&…

HarmonyOS-面试整理

目录 为什么选择HarmonyOS/ 优点/特点鸿蒙系统的权限有哪些说一说鸿蒙系统的安全机制说一说鸿蒙系统的微内核与安卓的内核区别鸿蒙操作系统的微内核架构有哪些优势分布式能力在鸿蒙系统中如何实现请解释一下鸿蒙系统中的分布式软总线技术如何在鸿蒙操作系统中进行多设备协同开发…

Python中PDF转Word的技术

Python PDF转Word技术概述 在日常办公和数据处理中,经常需要将PDF文档转换为Word文档,以便进行编辑、修改或格式调整。Python作为一种强大的编程语言,提供了多种库和工具来实现这一功能。以下是对Python中PDF转Word技术的详细介绍。 一、技…

功率器件热设计基础(四)——功率半导体芯片温度和测试方法

/ 前言 / 功率半导体热设计是实现IGBT、碳化硅SiC高功率密度的基础,只有掌握功率半导体的热设计基础知识,才能完成精确热设计,提高功率器件的利用率,降低系统成本,并保证系统的可靠性。 功率器件热设计基础系列文章会…

naive ui 安装

注意,naive-ui 仅支持 Vue3。如果你在使用 Vue2,可以去看看别的库。 npm 使用 npm 安装。 npm i -D naive-ui UMD 参考 使用 UMD。 字体 npm i -D vfonts 图标 naive-ui 建议使用 xicons 作为图标库。

Kafka消息不丢失与重复消费问题解决方案总结

1. 生产者层面 异步发送与回调处理 异步发送方式:生产者一般使用异步方式发送消息,异步发送有消息和回调接口两个参数。在回调接口的重写方法中,可通过异常参数判断消息发送状态。若消息发送成功,异常参数为null;若发…

linux-centos-安装miniconda3

参考: 最新保姆级Linux下安装与使用conda:从下载配置到使用全流程_linux conda-CSDN博客 https://blog.csdn.net/qq_51566832/article/details/144113661 Linux上删除Anaconda或Miniconda的步骤_linux 删除anaconda-CSDN博客 https://blog.csdn.net/m0_…

JDK7 与 JDK8 的 HashMap 的区别

JDK7 与 JDK8 的 HashMap 的区别: 项JDK7JDK8数据结构数组 链表。 复杂度:O(n)数组 链表 红黑树 (若链表长度大于等于8 且容量小于64 会进行扩容;若链表长度大于8 且数组长度大于等于64,会转化为红黑树&#xff08…

【每日学点鸿蒙知识】Taro、native层获取文件宽度、位置变化callback、数据迁移、oh_modules说明等

1、Taro开发HarmonyOS NEXT有相应的开发文档吗? Taro Harmony Hybrid容器是为让Taro小程序代码可以完整的运行在鸿蒙单内核系统里,在Taro H5平台的基础上,基于原生壳工程的jsbridge能力,扩展H5平台不支持的小程序Api能力&#xf…

pycharm+anaconda创建项目

pycharmanaconda创建项目 安装: Windows下PythonPyCharm的安装步骤及PyCharm的使用-CSDN博客 详细Anaconda安装配置环境创建教程-CSDN博客 创建项目: 开始尝试新建一个项目吧! 选择好项目建设的文件夹 我的项目命名为:pyth…

前端(九)js介绍(2)

js介绍(2) 文章目录 js介绍(2)一、函数1.1函数的两种形式1.2函数的作用域1.3声明与提升 二、bom操作三、dom操作 一、函数 1.1函数的两种形式 //有参函数 //js中的函数只能返回一个值,如果要返回多个需要放在数组或对象中 function func(a,b){return ab } func(1,…

京准科普:车辆测速网络时间同步系统的概述

京准科普:车辆测速网络时间同步系统的概述 采用毫秒级标准NTP时间同步服务器检定区间测速系统主要用于指导测量车辆在特定区间内的平均速度,以确保交通法规的严格执行;以下是详细的解决方案: 1. 系统需求分析 高精度时间同步&am…

leetcode 3219. 切蛋糕的最小总开销 II

题目&#xff1a;3219. 切蛋糕的最小总开销 II - 力扣&#xff08;LeetCode&#xff09; 排序贪心。 开销越大的越早切。 注意m或n为1的情况。 class Solution { public:long long minimumCost(int m, int n, vector<int>& horizontalCut, vector<int>&…

基于单片机的多功能视力保护器(论文+源码)

1.系统设计 多功能视力保护器在设计过程中能够对用户阅读过程中的各项数据信息进行控制&#xff0c;整体设计分为亮种模式&#xff0c;分别是自动模式&#xff0c;手动模式。在自动模式的控制下&#xff0c;当单片机检测当前光照不强且有人时就开启LED灯&#xff0c;并且会根据…

掌握大数据处理利器:Flink 知识点全面总结【上】

1.Flink的特点 Apache Flink 是一个框架和分布式处理引擎&#xff0c;用于对无界和有界数据流进行状态计算。 Flink主要特点如下&#xff1a; 高吞吐和低延迟。每秒处理数百万个事件&#xff0c;毫秒级延迟。结果的准确性。Flink提供了事件时间(event--time)和处理时间(proces…

常用的公共 NTP(网络时间协议)服务器

公共 NTP 服务列表 以下是一些常用的公共 NTP&#xff08;网络时间协议&#xff09;服务器&#xff0c;供您参考&#xff1a; 中国地区公共 NTP 服务器 国家授时中心 NTP 服务器&#xff1a;ntp.ntsc.ac.cn中国 NTP 快速授时服务&#xff1a;cn.ntp.org.cn阿里云公共 NTP 服务…

阿里巴巴国际站自养号测评的详细步骤

阿里巴巴国际站是很多外贸企业获客的重要渠道。不过随着跨境电商的迅猛发展&#xff0c;掌握有效的运营策略对于提升企业竞争力来说至关重要。其中&#xff0c;自养号测评是一种有效的运营策略&#xff0c;它可以提升店铺的曝光度。下面是一些关键步骤和注意事项。 一、自养号的…

log4j2的Strategy、log4j2的DefaultRolloverStrategy、删除过期文件

文章目录 一、DefaultRolloverStrategy1.1、DefaultRolloverStrategy节点1.1.1、filePattern属性1.1.2、DefaultRolloverStrategy删除原理 1.2、Delete节点1.2.1、maxDepth属性 二、知识扩展2.1、DefaultRolloverStrategy与Delete会冲突吗&#xff1f;2.1.1、场景一&#xff1a…