互评-OO之接口-DAO模式代码阅读及应用.xls
1. StudenDaoListImpl.java与StudentDaoArrayImpl.java有何不同?
两个java文件里面的代码如下:
//StudenDaoListImpl.java
package stumanagement;
import java.util.ArrayList;
import java.util.List;
public class StudenDaoListImpl implements StudentDao {
private List<Student> students = new ArrayList<Student>();
@Override
public Student getStuByName(String name) {
Student temp = null;
for(Student e:students){
if(e.getName().equals(name)){
temp = e;
}
}
return temp;
}
@Override
public boolean addStudent(Student student) {
students.add(student);
return true;
}
@Override
public void diplayAllStudents(){
for(Student e:students){
if (e != null)
System.out.println(e);
}
}
}
//StudentDaoArrayImpl.java
package stumanagement;
public class StudentDaoArrayImpl implements StudentDao {
private Student[] students;
public StudentDaoArrayImpl(int size) {
students = new Student[size];
}
@Override
public Student getStuByName(String name) {
Student temp = null;
for(int i=0; i<students.length;i++){
if(students[i]!= null){
if (students[i].getName().equals(name)){
temp = students[i];
break;
}
}
}
return temp;
}
@Override
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;
}
@Override
public void diplayAllStudents(){
for(Student e:students){
if (e != null)
System.out.println(e);
}
}
}
首先,两种方法都实现了相同的三个功能:
- getStuByName(String name) 查询学生信息;
- addStudent(Student student) 添加学生;
- diplayAllStudents() 显示所有学生;
但是每一个功能的实现方式不同。原因是每个方法对于学生数据的存储的数据结构不同。StudenDaoListImpl.java利用List列表的方式存储,StudentDaoArrayImpl.java利用数组的方式存储。
2. StudentDao.java文件是干什么用的?为什么里面什么实现代码都没有?
StudentDao.java文件只说明了业务逻辑为如何,将数据库的所有操作定义成抽象方法,可以提供多种数据结构方式实现。(就是确定你要实现何种功能,具体的功能实现可以有自己的方法)。该文件为DAO接口,只有方法声明,没有方法的具体实现。
3. 使用搜索引擎搜索“Java DAO”,选出几句你能看懂的、对你最有启发的话。请结合接口知识去理解。
参考文章:https://www.runoob.com/note/27029
DAO 模式的优势就在于它实现了两次隔离:
1、隔离了数据访问代码和业务逻辑代码。业务逻辑代码直接调用DAO方法即可,完全感觉不到数据库表的存在。分工明确,数据访问层代码变化不影响业务逻辑代码,这符合单一职能原则,降低了藕合性,提高了可复用性。
2、隔离了不同数据库实现。采用面向接口编程,如果底层数据库变化,如由 MySQL 变成 Oracle 只要增加 DAO 接口的新实现类即可,原有 MySQ 实现不用修改。这符合 "开-闭" 原则。该原则降低了代码的藕合性,提高了代码扩展性和系统的可移植性。
理解:
- 业务逻辑代码,即你要实现的功能函数。DAO模式隔离了数据访问代码和业务逻辑代码,即DAO接口只需要定义方法,具体用何种方式实现功能他就不再过问了。在测试函数中,可以选择不同的数据结构进行存储,各个文件,类之间分工明确。代码的扩展性也更好。
- 面向接口编程就是面向共同行为进行编程。可以将接口声明与实现分离开,从而大大提高程序的灵活性。DAO模式的灵活性体现在,如果想要将存储的方式改变,只需要在DAO接口添加一个新的实现类就行,方便快速。
- 看见隔离这个词,第一个想到的概念就是“安全”。数据功能的实现与其他代码之间被DAO接口文件隔离,就算底层数据崩溃了与我上层文件关系不大,安全。
4. 尝试运行Test.java。根据注释修改相应代码。结合参考代码回答使用DAO模式有什么好处?
DAO模式的优势:
- 数据访问层代码变化不影响业务逻辑代码,功能单一,分工明确,安全;
- 隔离了不同数据库实现。可以实现多种数据结构存储,且各方式之间互不影响,添加新方式方便,改变存储方式方便。