1. (其它, 10分)
DAO模式是接口的一个典型应用。
阅读附件中的参考代码:
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);
}
}
}
1. StudenDaoListImpl.java与StudentDaoArrayImpl.java有何不同?
定义不同实现,两者功能相同但储存的方法不同。
1.StudentDaoArrayImpl.java:后台存储是用数组存储的时候,可以定义一个StudentDaoArrayImpl来专门来实现StudentDao;
2.StudenDaoListImpl.java:如果后台是用列表来实现可以定义另外一个类StudenDaoListImpl来实现。
这样可以轻松切换这两种存储模式。
2. StudentDao.java文件是干什么用的?为什么里面什么实现代码都没有?
- 定义业务逻辑:读写数据等一些接口。StudentDao.java文件是用于接口的声明。StudentDao.java文件中定义了一个名为StudentDao的接口,里面存放着三个方法声明。其他类可以通过继承来实现StudentDao.java文件中的方法,不同的子类根据不同的数据、不同的存储方式写出不一样的方法代码。这样处理可以实现将接口声明与实现相分离,从而大大提高程序的灵活性。
- 因为接口只规定了功能和使用方法,具体的实现要在子类中进行,在不同的实现类中进行不同的编码实现,即具体代码的实现要根据具体情况而定,根据需要进行代码的实现。故在接口中没有任何实现代码。
StudentDao.java代码:
package stumanagement;
public interface StudentDao {
public boolean addStudent(Student student);
public Student getStuByName(String name);
public void diplayAllStudents();
}
3. 使用搜索引擎搜索“Java DAO”,选出几句你能看懂的、对你最有启发的话。请结合接口知识去理解。
DAO (DataAccessobjects 数据存取对象)是指位于业务逻辑和持久化数据之间实现对持久化数据的访问。
理解:DAO模式将数据库操作都封装起来,将数据访问和业务逻辑分离,提供面向对象的数据访问接口。其通过定义接口,然后让不同的类来实现该接口,可以将对数据的操作封装起来,从外部来看,对数据的操作都是一样的,但是在类的内部对数据的操作往往都有所不同。
隔离了不同数据库实现。
采用面向接口编程,分离开来便于管理,方便代码的编写。当使用的数据库发生变化时,只需要根据接口实现一个操作新的数据库的新类即可,而无需对原有的类进行修改,降低了代码的藕合性,提高了代码扩展性和系统的可移植性,具有可读性。
4. 尝试运行Test.java。根据注释修改相应代码。结合参考代码回答使用DAO模式有什么好处?
- 隔离了数据访问代码和业务逻辑代码。在Test.java的main方法中,只需要调用addStudent、getStuByName、diplayAllStudents即可实现对student数据的增添、获取和打印功能,而无须具体了解是如何访问到这些数据的。
- 分工明确,数据访问层代码变化不影响业务逻辑代码,提高了可复用性,隔离了不同数据库实现。参考代码中StudentDaoArrayImpl和StudenDaoListImpl两个类均实现了StudentDao接口,它们具有相同的方法,但是它们具体存储数据的形式不同,想要使用哪种数据存储方式就注释掉另外一种即可,而无须修改数据访问代码。
StudentDao sdm = new StudentDaoArrayImpl(50);//使用数组实现 //StudentDao sdm = new StudenDaoListImpl();//使用列表实现
- 降低了代码的藕合性,提高了代码扩展性和系统的可移植性。
- DAO接口把对数据库的所有操作定义成抽象方法,可以提供多种实现,实现了接口声明与实现的分离;而在DAO 的实现类中针对不同数据库给出DAO接口定义方法的具体实现;DAO模式的数据库连接和关闭工具类避免了数据库连接和关闭代码的重复使用,方便修改。
5.可选:编写一些使用DAO模式的代码。比如使用文件作为购物车存储底层。