Java学习通互评5

1.StudenDaoListImpl.java与StudentDaoArrayImpl.java有何不同?

前者用ArrayList,后者用普通数组;前者无需指定初始容量,后者需在创建对象时传入数组大小;前者支持动态扩容,后者容量固定,数组满后无法继续添加;前者直接调用add方法即可添加,后者需遍历数组找到null才能添加

2.StudentDao.java文件是干什么用的?为什么里面什么实现代码都没有?

作用:作为DAO 接口,定义学生数据操作的标准协议,统一所有实现类的方法名称、参数及返回值,让上层代码无需关注底层存储细节,只需面向接口编程
无实现代码的原因:接口的本质是方法规范,仅定义要做什么,不定义怎么做

3.使用搜索引擎搜索“Java DAO”,选出几句你能看懂的、对你最有启发的话。请结合接口知识去理解。

(1)“DAO 模式将数据访问逻辑与业务逻辑分离,通过接口隔离底层数据存储的变化”
理解:接口(如 StudentDao)是 “中间层”,业务逻辑(Test 类)只调用接口方法,若底层存储从数组换成列表(或数据库、文件),只需更换实现类,无需修改业务代码,符合 “开闭原则”(对扩展开放,对修改关闭)
(2):“DAO 接口定义数据操作的统一方法,实现类负责与具体存储介质交互,上层代码面向接口而非具体实现”

4.尝试运行Test.java。根据注释修改相应代码。结合参考代码回答使用DAO模式有什么好处?

理解:接口强制所有实现类遵循相同方法规范,避免因实现类方法不一致导致上层代码混乱;同时上层代码(如Test类)中StudentDao sdm的定义,体现 “多态” 特性,同一接口引用可指向不同实现类对象
灵活性:切换底层存储方式(数组→列表)时,只需修改StudentDao的初始化代码(如new StudentDaoArrayImpl(50)→new StudenDaoListImpl()),其余代码不变
规范性:接口强制实现类统一方法,避免不同存储方式的实现类方法混乱(如添加学生统一叫addStudent,而非有的叫add、有的叫insert)
可维护性:若需修改数据访问逻辑(如查询学生时忽略大小写),只需修改对应实现类的getStuByName方法,无需改动所有关联代码

package stumanagement;

public class Test {

    public static void main(String[] args) {
        // 创建几个测试学生
        Student[] students = new Student[3];
        students[0] = new Student("Tom");
        students[1] = new Student("Jerry");
        students[2] = new Student("Sophia");

        // ========= 根据注释切换实现方式 =========
        // 方式1:使用数组实现(当前启用)
        StudentDao sdm = new StudentDaoArrayImpl(50);

        // 方式2:使用 List 实现(取消下一行注释前,请确认类名拼写)
        // StudentDao sdm = new StudenDaoListImpl(); // 注意:类名拼写错误!

        System.out.println("===========写入学生========");
        for (Student e : students) {
            if (!sdm.addStudent(e)) {
                System.out.println("添加学生失败");
            } else {
                System.out.println("插入成功!!");
            }
        }

        System.out.println("===========显示所有学生========");
        sdm.diplayAllStudents();

        System.out.println("===========查询学生========");
        Student temp = sdm.getStuByName("Tom");
        if (temp == null) {
            System.out.println("查无此人");
        } else {
            System.out.println(temp);
        }
    }
}

posted @ 2025-10-18 20:27  IXIXIX0404  阅读(4)  评论(0)    收藏  举报