互评五

news/2025/10/19 21:21:38/文章来源:https://www.cnblogs.com/lrz1/p/19151439

一、

  1. 数据存储结构不同
    ArrayImpl: 使用固定大小的数组 Student[] students
    ListImpl: 使用动态数组 ArrayList students
  2. 构造函数差异
    ArrayImpl: 需要指定初始大小 public StudentDaoArrayImpl(int size)
    ListImpl: 无需指定大小,自动扩容
  3. 添加学生方法的实现
    java
    // ArrayImpl - 需要遍历查找空位,可能失败
    for(int i=0; i<students.length;i++){
    if(students[i]==null){
    students[i] = student;
    success = true;
    break;
    }
    }
    return success; // 可能返回false(数组已满)
    // ListImpl - 直接添加,总是成功
    students.add(student);
    return true; // 总是返回true
  4. 查找学生方法的效率
    ArrayImpl: 需要检查null值 if(students[i]!= null)
    ListImpl: 直接遍历,无需null检查
  5. 容量限制
    ArrayImpl: 有固定容量限制,可能无法添加新学生
    ListImpl: 无固定限制,自动扩容
  6. 内存使用
    ArrayImpl: 可能浪费内存(有空位)
    ListImpl: 内存使用更高效

二、
这段代码定义了一段接口,实现多态:
// 可以用接口类型引用不同的实现
StudentDao dao1 = new StudentDaoArrayImpl(10);
StudentDao dao2 = new StudenDaoListImpl();
// 调用相同的方法,但执行不同的实现
dao1.addStudent(student);
dao2.addStudent(student);
没有实现代码是因为接口只负责定义规范和声明方法,不包含具体实现。

三、
摘抄:DAO(Data Access Object)模式,在Java编程中,是一种用于隔离应用程序/业务层与持久层(通常是关系型数据库,但也可以是其他持久化机制)的结构模式。它通过一个抽象的API隐藏了所有在底层存储机制中执行CRUD操作的复杂性,使得两层可以独立发展,而不需要彼此了解。
理解:1. 接口作为抽象层
java
public interface StudentDao {
public boolean addStudent(Student student);
public Student getStuByName(String name);
public void diplayAllStudents();
// 通常还有 update 和 delete 方法
}
接口的作用:定义CRUD操作的"契约",但不关心具体实现。

  1. 实现类处理具体细节
    java
    // 数组实现
    public class StudentDaoArrayImpl implements StudentDao {
    private Student[] students;
    // 具体的数组操作实现...
    }

// List实现
public class StudenDaoListImpl implements StudentDao {
private List students;
// 具体的List操作实现...
}

// 未来可能的数据库实现
public class StudentDaoDBImpl implements StudentDao {
// 具体的数据库操作...
}
隔离的具体体现
业务层代码(不需要知道存储细节)
java
public class StudentService {
private StudentDao studentDao; // 只依赖接口

public StudentService(StudentDao dao) {this.studentDao = dao;  // 注入具体实现
}public void registerStudent(String name, int age) {Student student = new Student(name, age);studentDao.addStudent(student);  // 只管调用,不管怎么存
}

}
独立发展的优势
存储方式可以自由变化
java
// 今天用数组
StudentDao dao = new StudentDaoArrayImpl(100);

// 明天用List(业务代码无需修改!)
StudentDao dao = new StudenDaoListImpl();

// 后天用数据库(还是无需修改业务代码!)
StudentDao dao = new StudentDaoDBImpl("jdbc:mysql://...");
两层独立演化
业务层:专注于业务逻辑,不关心数据怎么存
数据层:专注于数据存取优化,不关心业务逻辑

四、
运行与修改说明
原Test.java使用StudentDaoArrayImpl(数组实现),若修改注释切换为StudenDaoListImpl(List实现):
// StudentDao sdm = new StudentDaoArrayImpl(50);
StudentDao sdm = new StudenDaoListImpl();
程序仍可正常运行,输出结果一致(添加3个学生、显示所有学生、查询“Tom”成功)。
DAO模式的好处
解耦业务逻辑与数据存储:Test.java的业务逻辑(添加、查询学生)不依赖具体存储方式(数组/List),仅依赖StudentDao接口。
易于切换数据源:如需将存储方式改为数据库或文件,只需新增一个实现StudentDao的类(如StudentDaoDbImpl),无需修改Test.java的业务代码。
提高可维护性:数据访问逻辑集中在实现类中,修改存储逻辑(如数组扩容规则)不会影响上层业务代码。

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

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

相关文章

ACS ACR122 0 是啥

ACS ACR122 0 是啥你提到的 “ACS ACR122 0”,实际上指的是一个 NFC 读卡器(RFID Reader)。 下面我详细给你讲清楚它是什么、怎么用、以及它为什么会在系统里显示成那个名字。🪪 一、设备全称 ACS ACR122U NFC Re…

C++ std::forwardT 的使用

C++ std::forwardC++ std::forward 的使用 C++真实一门细节比较多的语言,稍不注意就会出现奇怪请琢磨不透的bug,这时候就说明你的C++基础不扎实。 C++ lvalue rvalue std::string hello = "Hello World";顾…

机器人技术新前沿:自动驾驶路径规划算法解析

本文深入探讨了自动驾驶机器人出租车技术的核心算法,包括基于机器学习的路径规划、环境感知与行为预测系统,并对比了火星探测器与城市自动驾驶在技术挑战上的差异。机器人技术新前沿 某中心子公司Zoox首席软件工程师…

前端框架文档新思路:基于源码解析的自动化方案

项目背景 最近我们团队自研了一个基于 React 的 H5 前端框架,领导让我来负责编写框架的使用文档。我选择了 dumi 来搭建文档站点,大部分内容都是手动写 Markdown 来介绍各种功能,包括:初始化、目录结构、生命周期、…

tryhackme-预安全-网络基础知识-数据包和帧-07

tryhackme-Pre Security-Pre Security-Network Fundamentals-Packets & Frames 房间地址:https://tryhackme.com/room/packetsframes 这是网络安全入门的基础模块的计算机科学基础知识:Packets & Frames(数…

Agilent E363x 系列

Agilent E363x 系列⚙️ 一、Agilent E363x 是什么设备 Agilent E363x(也写作 E3630 / E3631 / E3632 / E3633 / E3634 等型号) 是一系列由 Agilent Technologies(现 Keysight Technologies) 出品的 👉 可编程直流…

嗣澳——扫,墨依奥——描,希伊桉——线

rt: 扫描线 定义 扫描线顾名思义就是用线扫描,维护区间的长度。它一般被用来解决图形面积,周长问题。 rt:把整个矩形分成如图各个颜色不同的小矩形,小矩形的高是扫过的距离,然而矩形的水平宽一直在变化。 给每一个…

迈向零信任存储:基于RustFS构建内生安全的数据架构

迈向零信任存储:基于RustFS构建内生安全的数据架构在数据泄露事件频发的当下,传统边界安全模型已不足以保护企业核心数据资产。本文将深入解析如何基于RustFS构建​内生安全的零信任存储架构,实现从“信任网络”到“…

服务器被攻击!原因竟然是他?真没想到...

国庆回来之后服务器就被搞了,一直没用完过的流量,竟然神奇般就被耗费完了,这就要承担每天被扣费的问题了,而且正常用户访问也很慢。 于是赶紧用官方的安全工具扫描了服务器,没发现问题。之后看了 Nginx 的访问日志…

得到的眼泪学会了哭泣 得到的悲伤缓慢摧残肉体 被所爱之人踩在地

test23 前后缀排序sort 复制数组然后 sa 即可。 像忘了哪个题目一样,先考虑删除 \(s_i,s_k\) 哪个会更小,不妨令 \(i<j\)。考虑 \(s_j\) 是 \(i\) 后面第一个不同的字符,发现删除点在 \([i+1,j-1],j,[j+1,n]\) 的…

ChatGPT From Zero To Hero - LLM学习笔记(一) - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

基于Java+SSM+Django数字工坊课程教学网站(源码+LW+调试文档+讲解等)/数字工坊/课程教学/网站链接/在线课程/学习资源/视频教程/教育平台/数字艺术/学习网站/课程资料/ - 详解

基于Java+SSM+Django数字工坊课程教学网站(源码+LW+调试文档+讲解等)/数字工坊/课程教学/网站链接/在线课程/学习资源/视频教程/教育平台/数字艺术/学习网站/课程资料/ - 详解2025-10-19 20:52 tlnshuju 阅读(0) 评…

框架架构的多维赋能——论其对自然语言处理深层语义分析的影响与启示

框架架构的多维赋能——论其对自然语言处理深层语义分析的影响与启示pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &qu…

路径规划算法学习Day1:深度优先搜索算法(DFS)

路径规划算法学习Day1:深度优先搜索算法(DFS)算法学习(Depth First Search) DFS是一种用于遍历或搜索树、图等结构的经典算法。其核心思想是沿一条路径尽可能深入,遇到无法继续的节点时再回溯到上一个分叉点,继…

深入理解 Java和Go语法和使用场景(指南十一) - 指南

深入理解 Java和Go语法和使用场景(指南十一) - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&qu…

.seq 是 TestStand Sequence File(测试序列文件) 的扩展名。

.seq 是 TestStand Sequence File(测试序列文件) 的扩展名。你提到的 .seq 文件 在 LabVIEW 测试系统(尤其是 TestStand) 里非常常见。下面我给你详细讲讲它的概念、作用和和 LabVIEW 的关系。🧩 一、.seq 文件是…

使用 robocopy 命令备份还原数据速度统计

备份: 通过 robocopy 将远程电脑目录(D:/data)内的数据备份到本地(D:\yoga14s_data)robocopy \\192.168.1.103\d\data D:\yoga14s_data /MIR /COPY:DAT /MT:64 /R:0 /W:0 /FFT /NP /LOG+:rc_backup.log日志:----…

顺天地之自然

事与愿违,必是另有安排;人生一世,有得有失;不汲汲于得,不戚戚于失;顺天地之自然,应心中之所念;

第2章 人工智能项目的核心特征与挑战

第2章 人工智能项目的核心特征与挑战第2章 人工智能项目的核心特征与挑战 本章简介 第1章确立了人工智能项目的基本概念。要真正驾驭它,项目经理必须深入理解其内在运行逻辑——即核心特征。关键认知在于:AI项目的失…