DAO模式代码阅读及应用
1、StudenDaoListImpl.java与StudentDaoArrayImpl.java有何不同?
List文件使用链表进行信息的存储,各类操作具有链表的特点;而Array文件使用数组存储,各类操作具有数组的特性。
2、StudentDao.java文件是干什么用的?为什么里面什么实现代码都没有?
(1)StudentDao.java文件中定义了一个接口,名为StudentDao。仅用于存放三个方法声明,却并不实现。应该在不同的类中进行相应的方法实现。
(2)接口是一个契约,不仅仅约束着实现者,同时也是一个保证,保证提供的服务(常量、方法)是稳定、可靠的,如果把实现代码写到接口中,那接口就绑定了可能变化的因素,这就会导致实现不再稳定和可靠,是随时都可能被抛弃、被更改、被重构的。所以,接口中虽然可以有实现,但应避免使用。
3、使用搜索引擎搜索“Java DAO”,选出几句你能看懂的、对你最有启发的话。请结合接口知识去理解。
·PART1:
DAO模式(Data Access Object):
1)是面向接口编程思想的体现。
2)是一个把访问数据库的代码封装起来的类。
3)DAO存在于数据库与业务逻辑(Service)之间。
实现DAO模式:
1)提供一个DAO接口;
2)提供一个DAO接口的实现类;
3)编写一个DAO工厂,Service通过工厂来获取DAO实现。
面向接口编程:
目标:在实现类改变时可以不修改源代码,只修改配置文件即可
当客户需求变化时,只需编写该业务逻辑的新的实现类,
通过更改配置文件(例如Spring框架)中该接口的实现类就可以完成需求。
使功能依赖接口,而不是实现类。方便实现类的改变。
将接口实现的产出,定义在工厂里。
需要什么功能,就从工厂取什么功能。
原则:开闭原则。可添加,不可改动
·PART2:
在Java程序中,经常需要把数据持久化,也需要获取持久化的数据,但是在进行数据持久化的过程中面临诸多问题(如:数据源
不同、存储类型不同、供应商不同、访问方式不同等等),请问如何能以统一的接口进行数据持久化的操作?
解决方案如下:
4、尝试运行Test.java。根据注释修改相应代码。结合参考代码回答使用DAO模式有什么好处?
数组:
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");
StudentDao sdm = new StudentDaoArrayImpl(50);//使用数组实现
//StudentDao sdm = new StudenDaoListImpl();//使用列表实现
// 往后台写数据,无需考虑后台是什么(到底是数据库、文件、数组、List)
// 因为这里是面向StudentDao接口
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);
}
}
}
运行结果:
链表:
package stumanagement;
public class Test {
public static void main(String[] args) {
Student[] students = new Student[4];
students[0] = new Student("Tom");
students[1] = new Student("Jerry");
students[2] = new Student("Sophia");
students[3] = new Student("ding");
//StudentDao sdm = new StudentDaoArrayImpl(50);// 使用数组实现
StudentDao sdm = new StudenDaoListImpl();//使用列表实现
// 往后台写数据,无需考虑后台是什么(到底是数据库、文件、数组、List)
// 因为这里是面向StudentDao接口
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);
}
}
}
运行结果:
使用DAO模式的好处:
通过接口,便于根据需要有针对性地编写实现方法,而不需要大规模地修改代码。
DAO将数据访问集中在独立的一层,因为所有的数据访问都由DAO代理,这层独立的DAO将数据访问的实现和系统的其余部分剥离,将数据访问集中,使得系统更具可维护性。同时依赖越少,可复用性越高。便于修改。