当前位置: 首页 > 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.jsqmd.com/news/16913/

相关文章:

  • 机器人技术新前沿:自动驾驶路径规划算法解析
  • 前端框架文档新思路:基于源码解析的自动化方案
  • tryhackme-预安全-网络基础知识-数据包和帧-07
  • Agilent E363x 系列
  • 嗣澳——扫,墨依奥——描,希伊桉——线
  • 迈向零信任存储:基于RustFS构建内生安全的数据架构
  • 如果这就是人类脑海的话 雪白纸上划出血红层层痕迹 不如杀死这些记忆
  • 服务器被攻击!原因竟然是他?真没想到...
  • ChatGPT From Zero To Hero - LLM学习笔记(一) - 详解
  • 基于Java+SSM+Django数字工坊课程教学网站(源码+LW+调试文档+讲解等)/数字工坊/课程教学/网站链接/在线课程/学习资源/视频教程/教育平台/数字艺术/学习网站/课程资料/ - 详解
  • 框架架构的多维赋能——论其对自然语言处理深层语义分析的影响与启示
  • 路径规划算法学习Day1:深度优先搜索算法(DFS)
  • 深入理解 Java和Go语法和使用场景(指南十一) - 指南
  • .seq 是 TestStand Sequence File(测试序列文件) 的扩展名。
  • 使用 robocopy 命令备份还原数据速度统计
  • 顺天地之自然
  • 第2章 人工智能项目的核心特征与挑战
  • 深入解析:【办公类-115-04】20250920职称资料上传03——压缩课题结题报告PDF的大小(控制在200MB以内)
  • Mac 打开终端方式
  • 《青云志》
  • 树状数组和线段树基础
  • 详细介绍:Vue Router路由
  • AVR 单片机批量编程脚本(.bat)
  • PWN手的成长之路-20-cgpwn2
  • C++ofstream写文件bug
  • Debian13中使用Virtual-box安装Window10虚拟机并设置USB直通
  • 2024长城杯决赛-溯源取证1
  • [Agent] ACE(Agentic Context Engineering)和Dynamic Cheatsheet学习笔记
  • 2025年9月模拟赛整合
  • AI元人文构想研究:理论溯源、跨学科审视与技术路径探析