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

DAO模式代码阅读及应用

疑难问题

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

答:StudenDaoListImpl.java文件是用链表来存储学生信息而,StudentDaoArrayImpl.java文件使用数组存储学生信息。都是实现了查找学生的方法,但由于StudenDaoListImpl.java文件是用链表,所以从头开始直接判断,到空为结束,直到找到学生返回。而StudentDaoArrayImpl.java文件是用数组,在遍历过程中,有可能会遇到姓名为空的情况,这时就要判断是否为空,不为空才能比较是否找到学生。在实现增加增加学生的方法,链表直接使用自带add方法增加。而数组要遍历整个数组,找到空的地方进行存储,有可能会遇到数组满的情况。在实现输出所有学生信息的方法,两者大致相同。

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

答:在StudentDao.java文件中定义了一个StudentDao接口,里面有三个方法的声明,其他类通过继承StudentDao类,实现StudentDao.java文件中的方法,这样可以子类有着相同的三个方法声明,不同的子类根据不同的数据不同的存储方式写出不一样的方法代码。

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接口,访问子类,建立子类的数据数组,就想StudentDao sdm = new StudentDaoArrayImpl(50);通过子类建立了子类数组,通过子类自己内部特定方法进行使用,插入、显示、查询学生,然后换成StudentDao sdm = new StudenDaoListImpl();建立子类链表数据,也还是根据链表子类自身内部方法来实现插入、显示、查询方法,通过DAO接口,使用不同的子类,使用子类内部方法,这样使得可以在不同数据处理更加方便,通过写出DAO接口,根据接口方法,写出不同数据存储方式的方法,使用不同数据处理更加便捷。

5.可选:编写一些使用DAO模式的代码。比如使用文件作为购物车存储底层。

原文地址:https://www.cnblogs.com/jiuweihong/p/13870198.html