互评-OO之接口-DAO模式代码阅读及应用.xls

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

两个java文件里面的代码如下:

//StudenDaoListImpl.java
package stumanagement;

import java.util.ArrayList;
import java.util.List;

public class StudenDaoListImpl implements StudentDao {

	private List<Student> students = new ArrayList<Student>();
	
	@Override
	public Student getStuByName(String name) {
		Student temp = null;
		for(Student e:students){
			if(e.getName().equals(name)){
				temp = e;
			}
		}
		return temp;
	}

	@Override
	public boolean addStudent(Student student) {
		students.add(student);
		return true;
		
	}
	
	@Override
	public void diplayAllStudents(){
		for(Student e:students){
			if (e != null)
				System.out.println(e);
		}
	}

}


//StudentDaoArrayImpl.java
package stumanagement;

public class StudentDaoArrayImpl implements StudentDao {

	private Student[] students;
	
	public StudentDaoArrayImpl(int size) {
		students = new Student[size];
	}

	@Override
	public Student getStuByName(String name) {
		Student temp = null;
		for(int i=0; i<students.length;i++){
			if(students[i]!= null){
				if (students[i].getName().equals(name)){
					temp = students[i];
					break;
				}
			}
		}
		return temp;
		
	}

	@Override
	public boolean addStudent(Student student) {
		boolean success = false;
		for(int i=0; i<students.length;i++){
			if(students[i]==null){
				students[i] = student;
				success = true;
				break;
			}
		}
		return success;
	}
	
	@Override
	public void diplayAllStudents(){
		for(Student e:students){
			if (e != null)
				System.out.println(e);
		}
	}

}

首先,两种方法都实现了相同的三个功能:

  • getStuByName(String name) 查询学生信息;
  • addStudent(Student student) 添加学生;
  • diplayAllStudents() 显示所有学生;
    但是每一个功能的实现方式不同。原因是每个方法对于学生数据的存储的数据结构不同。StudenDaoListImpl.java利用List列表的方式存储,StudentDaoArrayImpl.java利用数组的方式存储。

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

StudentDao.java文件只说明了业务逻辑为如何,将数据库的所有操作定义成抽象方法,可以提供多种数据结构方式实现。(就是确定你要实现何种功能,具体的功能实现可以有自己的方法)。该文件为DAO接口,只有方法声明,没有方法的具体实现。

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

参考文章:https://www.runoob.com/note/27029

DAO 模式的优势就在于它实现了两次隔离:
1、隔离了数据访问代码和业务逻辑代码。业务逻辑代码直接调用DAO方法即可,完全感觉不到数据库表的存在。分工明确,数据访问层代码变化不影响业务逻辑代码,这符合单一职能原则,降低了藕合性,提高了可复用性。
2、隔离了不同数据库实现。采用面向接口编程,如果底层数据库变化,如由 MySQL 变成 Oracle 只要增加 DAO 接口的新实现类即可,原有 MySQ 实现不用修改。这符合 "开-闭" 原则。该原则降低了代码的藕合性,提高了代码扩展性和系统的可移植性。

理解:

  • 业务逻辑代码,即你要实现的功能函数。DAO模式隔离了数据访问代码和业务逻辑代码,即DAO接口只需要定义方法,具体用何种方式实现功能他就不再过问了。在测试函数中,可以选择不同的数据结构进行存储,各个文件,类之间分工明确。代码的扩展性也更好。
  • 面向接口编程就是面向共同行为进行编程。可以将接口声明与实现分离开,从而大大提高程序的灵活性。DAO模式的灵活性体现在,如果想要将存储的方式改变,只需要在DAO接口添加一个新的实现类就行,方便快速。
  • 看见隔离这个词,第一个想到的概念就是“安全”。数据功能的实现与其他代码之间被DAO接口文件隔离,就算底层数据崩溃了与我上层文件关系不大,安全。

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

DAO模式的优势:

  • 数据访问层代码变化不影响业务逻辑代码,功能单一,分工明确,安全;
  • 隔离了不同数据库实现。可以实现多种数据结构存储,且各方式之间互不影响,添加新方式方便,改变存储方式方便。

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

posted @ 2020-10-25 10:47  不会soma  阅读(131)  评论(0编辑  收藏  举报