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程序中,经常需要把数据持久化,也需要获取持久化的数据,但是在进行数据持久化的过程中面临诸多问题(如:数据源

不同、存储类型不同、供应商不同、访问方式不同等等),请问如何能以统一的接口进行数据持久化的操作?

解决方案如下:

Java如何在服务把接口暴露出去 java dao接口_数组

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


	}

}

运行结果:

Java如何在服务把接口暴露出去 java dao接口_数据访问_02

链表:

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

	}

}

运行结果:

Java如何在服务把接口暴露出去 java dao接口_数据访问_03

使用DAO模式的好处:

通过接口,便于根据需要有针对性地编写实现方法,而不需要大规模地修改代码。

DAO将数据访问集中在独立的一层,因为所有的数据访问都由DAO代理,这层独立的DAO将数据访问的实现和系统的其余部分剥离,将数据访问集中,使得系统更具可维护性。同时依赖越少,可复用性越高。便于修改。