接口-DAO模式代码阅读及应用

1. StudenDaoListImpl.java与StudentDaoArrayImpl.java有何不同?

• StudenDaoListImpl.java使用链表来实现学生管理系统;StudentDaoArrayImpl.java使用数组来实现学生管理系统。在查找的过程中,因为 StudenDaoListImpl.java使用链表来实现,所以从头开始直接查找,到为空时结束,直到找到所查询学生;StudentDaoArrayImpl.java使用数组来实现,需遍历数组并判断是否为空,不为空才能查找。在增加学生时,StudenDaoListImpl.java直接使用add方法增加;StudentDaoArrayImpl.java先遍历数组,找到为空的位置增加学生信息。

2. StudentDao.java文件是干什么用的?为什么里面什么实现代码都没有?

• StudentDao.java文件中定义了一个StudentDao接口,里面有三个方法的声明,其功能在不同的类中进行不同的编码实现。

3. 使用搜索引擎搜索“Java DAO”,选出几句你能看懂的、对你最有启发的话。请结合接口知识去理解。

• 隔离了数据访问代码和业务逻辑代码。业务逻辑代码直接调用DAO方法即可,完全感觉不到数据库表的存在。分工明确,数据访问层代码变化不影响业务逻辑代码,这符合单一职能原则,降低了藕合性,提高了可复用性。
• 通过DAO接口,访问DAO方法来解决问题,子类继承针对出不同的数据库可以写出不同的内部方法,通过DAO接口访问子类,使用子类方法,修改子类数据库代码数据,不会影响到DAO接口的使用,不同数据库对应不同的DAO方法代码,是的数据访问代码与业务逻辑代码隔离。

4. 尝试运行Test.java。根据注释修改相应代码。结合参考代码回答使用DAO模式有什么好处?

使用数组实现:

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

	}

}

运行结果:

使用列表实现:

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方法即可,分工明确,数据访问层代码变化不影响业务逻辑代码,这符合单一职能原则,降低了藕合性,提高了可复用性。

posted @ 2020-10-25 19:10  Vancciiii  阅读(97)  评论(0编辑  收藏  举报