当前位置: 首页 > 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.zskr.cn/news/24655.html

相关文章:

  • C++ std::forwardT 的使用
  • Agilent E363x 系列
  • 迈向零信任存储:基于RustFS构建内生安全的数据架构
  • 得到的眼泪学会了哭泣 得到的悲伤缓慢摧残肉体 被所爱之人踩在地
  • 框架架构的多维赋能——论其对自然语言处理深层语义分析的影响与启示
  • 路径规划算法学习Day1:深度优先搜索算法(DFS)
  • 顺天地之自然
  • 详细介绍:Vue Router路由
  • 《青云志》
  • AVR 单片机批量编程脚本(.bat)
  • 软工问题总结10.19
  • tryhackme-预安全-网络基础知识-OSI模型-06
  • AI元人文构想研究:理论溯源、跨学科审视与技术路径探析
  • NPM(更新中)
  • 使用DAO模式改造学生信息管理系统
  • 第1章 人工智能项目概述
  • Linux反弹shell解析
  • 2025-10-18 MX-S 模拟赛 赛后总结【MX】
  • clickhouse搭建单机版和集群版本
  • 零基础Linux快速上手-01
  • securecrt linux版本安装
  • P1896[SCOI2005]互不侵犯 解题笔记
  • 央企程序员AI创业一个月感受 ✨
  • Write To Spreadsheet labview这是什么
  • 从众多知识汲取一星半点也能受益匪浅【day16(2025.10.18)】(加班但只加到四点半)
  • 模拟赛T4 分析
  • 十月阅读笔记
  • #20232408 2025-2026-1 《网络与系统攻防技术》实验二实验报告 - 20232408
  • 关于我的博客密码
  • 如何选择合适的SAP实施公司?3步锁定靠谱的SAP服务商