当前位置: 首页 > news >正文

互评五

一、

  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.hskmm.com/?act=detail&tid=34532

相关文章:

  • 机器人技术新前沿:自动驾驶路径规划算法解析
  • 前端框架文档新思路:基于源码解析的自动化方案
  • 常用模板
  • C++ std::forwardT 的使用
  • tryhackme-预安全-网络基础知识-数据包和帧-07
  • 迈向零信任存储:基于RustFS构建内生安全的数据架构
  • 如果这就是人类脑海的话 雪白纸上划出血红层层痕迹 不如杀死这些记忆
  • 嗣澳——扫,墨依奥——描,希伊桉——线
  • 服务器被攻击!原因竟然是他?真没想到...
  • 得到的眼泪学会了哭泣 得到的悲伤缓慢摧残肉体 被所爱之人踩在地
  • 框架架构的多维赋能——论其对自然语言处理深层语义分析的影响与启示
  • 使用 robocopy 命令备份还原数据速度统计
  • 顺天地之自然
  • Mac 打开终端方式
  • PWN手的成长之路-20-cgpwn2
  • 树状数组和线段树基础
  • C++ofstream写文件bug
  • Debian13中使用Virtual-box安装Window10虚拟机并设置USB直通
  • 2024长城杯决赛-溯源取证1
  • [Agent] ACE(Agentic Context Engineering)和Dynamic Cheatsheet学习笔记
  • 2025年9月模拟赛整合
  • 软工问题总结10.19
  • AI元人文构想研究:理论溯源、跨学科审视与技术路径探析
  • NOAI官方学术支持
  • 【ARM CoreLink 系列 4.1 -- NI-700 interconnect hub 控制器详细介绍】
  • NPM(更新中)
  • 使用DAO模式改造学生信息管理系统
  • 【ARM CoreLink 系列 4 -- NIC-400 控制器详细介绍】
  • Linux反弹shell解析
  • 2025-10-18 MX-S 模拟赛 赛后总结【MX】