Java (2)

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

DAO模式代码阅读及应用

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

答:StudenDaoListImpl.java通过链表实现操作,查找添加过程较为方便,只需遍历链表查找,添加学生信息时,链表可以直接使用add;而StudentDaoArrayImpl.java使用数组来储存学生信息,数组遍历过程中,如果遇到姓名为空的情况需要判断是否为空。

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

答:①文件定义了名为StudentDao的接口,接口中存放三个方法声明,把需要实现的功能放入接口,然后定义类时,只需使用接口引用实现类即可

②接口仅仅是一种描述,而没有具体实现,同时也规范限制了命名

③修改时保留源码,通过定义的多个接口增强功能 ,可以直接复写接口中的抽象方法

④接口是实现软件松耦合的重要手段,描叙了系统对外的所有服务而不涉及任何具体的实现细节,这样比较安全严密

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

①DAO(Data Access Object 数据存取对象)

位于业务逻辑和持久化数据之间实现对持久化数据的访问

②DAO作用:

隔离业务逻辑代码和数据访问代码且隔离不同数据库的实现

业务逻辑层,数据访问层(Oracle,SQLServer,MySQL)

③DAO模式的组成部分:

·DAO接口

·DAO实现类

·实体类

·数据库连接和关闭工具类

④DAO模式实际上是两个模式组合,Data Accessor模式和Active Domain Object模式。

Data Accessor模式:封装了数据访问实现的机制,通过提供黒盒式数据存取接口,实现数据访问和业务逻辑的分离

Active Domain Object模式:实现业务数据的对象化封装

原理:通过对业务层提供基础数据操作的接口实现

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

	}

}

使用DAO模式的好处:各层代码分开写,思路更清晰方便维护

①数据存储逻辑的分离:一方面避免业务代码中混杂的JDBC代码,另一方面,数据访问接口与数据访问实现相分离,这样可以根据接口专注于数据库访问的最优化实现

②数据访问底层实现的分离:DAO模式将数据访问分为抽象层和实现层,分离了数据使用和数据访问的底层实现细节。这样可以在保持上层结构不变的情况下,通过更改底层实现来修改数据访问的机制

③资源管理和调度的分离:数据访问逻辑从业务逻辑中脱离开来,使数据访问层实现统一的资源调度,通过数据库连接池和各种缓存机制的使用,可以保持上层系统不变的情况下来提高系统性能

④数据抽象:通过对底层数据的封装,可以使用面向对象思想对数据进行操作,在代码上更易于清晰理解,对日后维护带来便利

posted @ 2020-10-25 11:07  Styoool(曾广芝)  阅读(81)  评论(0编辑  收藏  举报