互评-OO之接口-DAO模式代码阅读及应用
1.StudentDaoListImpl.java与StudentDaoArrayImpl.java有何不同?
(1)数据存储结构不同
- StudentDaoArrayImpl:使用数组(Student[])存储学生对象
public StudentDaoArrayImpl(int size) {
students = new Student[size];
}
- StudentDaoListImpl:使用ArrayList
存储学生对象
private List<Student> students = new ArrayList<Student>();
(2)getStuByName/diplayAllStudents方法不同
- StudentDaoArrayImpl使用 for 循环遍历数组,需要额外判断students[i]!=null,避免异常
public Student getStuByName(String name) {
Student temp = null;
for(Student e:students){
if(e.getName().equals(name)){
temp = e;
}
}
return temp;
}
- StudentDaoListImpl使用for 循环遍历列表
public Student getStuByName(String name) {
Student temp = null;
for(Student e:students){
if(e.getName().equals(name)){
temp = e;
}
}
return temp;
}
(3)addStudent方法不同
- StudentDaoArrayImpl:遍历数组寻找第一个null位置插入,若数组已满则添加失败,并返回false
public boolean addStudent(Student student) {
boolean success = false;
for(int i=0; i<students.length;i++){
if(students[i]==null){
students[i] = student;
success = true;
break;
}
}
return success;
}
- StudentDaoListImpl:直接调用ArrayList的add方法实现添加
public boolean addStudent(Student student) {
students.add(student);
return true;
}
2.StudentDao.java文件是干什么用的?为什么里面什么实现代码都没有?
StudentDao.java 是一个接口,用于声明操作学生数据的方法
public boolean addStudent(Student student);
public Student getStuByName(String name);
public void diplayAllStudents();
接口仅负责声明方法,不包含方法体,具体的实现代码由实现该接口的类编写。
3.使用搜索引擎搜索“Java DAO”,选出几句你能看懂的、对你最有启发的话。请结合接口知识去理解。

(图3.1为搜索引擎搜索结果)
个人理解:DAO模式它把数据操作和业务逻辑分开了,这样一来,要是数据库换了,也不用大量修改代码,只要搞个新的DAO实现类就行,特别灵活,而且各部分职责明确,出了问题也好找是哪块的毛病,代码也能重复用,维护起来也会方便。
4.尝试运行Test.java。根据注释修改相应代码。结合参考代码回答使用DAO模式有什么好处?

(图4.1为使用数组实现的结果)

(图4.2为使用列表实现的结果)
好处:
- DAO 模式将数据操作(如添加、查询学生)封装在专门的 DAO 类中,这样来无需关心数据的具体存储方式
- 统一数据访问接口,便于维护, 后续若需要新增其他存储方式,只需新增一个实现StudentDao接口的类
- 便于代码复用与扩展, DAO 实现类封装了数据操作, 若添加新的数据操作(如删除学生),只需在StudentDao接口中新增方法声明,再在各实现类中补充实现,无需修改其他代码
浙公网安备 33010602011771号