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);
}
}
}

浙公网安备 33010602011771号