Loading

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

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

一个是用数组存储数据,一个使用列表list来存储数据。虽然他们有相同的方法,但是其方法的实现并不相同。

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

该文件是作为一个接口声明,里面只声明了一些执行基础操作所需的方法,不提供具体实现操作,具体实现代码由实现接口的类保存。

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

  • 1.隔离业务逻辑代码和数据访问代码:在dao接口中,我们只需要考虑需要执行的功能操作,进行声明定义为抽象方法,得到业务逻辑代码,具体的数据访问代码再交由相应的实现类去实现,实现了业务逻辑代码与数据访问代码的隔离。在调用dao的时候,我们只知道要执行某个功能操作,并不需要知道数据访问代码是如何实现的。
  • 2.隔离了不同数据库的实现:不同数据库或数据类型的具体数据访问代码各自封装实现,互不影响,当当前的数据类型无法满足我们的需求时,不用对原有的DAO实现类进行修改,我们可以切换或增加新的dao接口实现类。

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


  • 1.可以根据不同的数据存储类型,选择合适的实现类,在数据存储类型改变时,不用对原代码进行大面积修改。
  • 2.实现了业务逻辑和数据访问代码分离,层次分明,利于维护。

5.可选:编写一些使用DAO模式的代码。

课程Course类

public class Course {
	private String name;//课程名称;
	private String teacher;//授课老师;
	private String weekday;//授课时间;
	
	public Course(String name,String teacher,String day) {
		this.name = name;
		this.teacher = teacher;
		this.weekday = day;
	}
	
	@Override
	public String toString() {
		return "Course [name=" + name + ", teacher=" + teacher + ", weekday=" + weekday + "]";
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getTeacher() {
		return teacher;
	}

	public void setTeacher(String teacher) {
		this.teacher = teacher;
	}

	public String getWeekday() {
		return weekday;
	}

	public void setWeekday(String weekday) {
		this.weekday = weekday;
	}
	

课程表TimetableDao接口

import java.util.*;

public interface TimetableDao {
	public abstract boolean addCourse(Course course) ;//添加课程;
	public abstract List<Course> getCourseByname(String name);//根据课程名称查找课程
	public abstract List<Course>getCourseBytime(String weekday);//根据时间查找该天课程
	public abstract void diplayAllCourses();//输出课程表
}

TimetableDaoArrayImpl类实现用数组保存课程

import java.util.*;
public class TimetableDaoArrayImpl implements TimetableDao{
	private Course timetable [];
	
	public TimetableDaoArrayImpl(int size) {
		timetable = new Course [size];
	}
	@Override
	public boolean addCourse(Course course) {
		for(int i=0;i<timetable.length;i++) {
			if(timetable[i] == null) {
				timetable[i] = course;
				return true;
			}
		}
		return false;
	}

	@Override
	public List<Course> getCourseByname(String name) {
		List<Course> list = new ArrayList<Course>();
		for(int i= 0;i<timetable.length;i++) {
			if(timetable[i] == null) {
				break;
			}
			if(timetable[i].getName().equals(name) == true)
				list.add(timetable[i]);
		}
		return list;
	}

	@Override
	public List getCourseBytime(String weekday) {
		List<Course> list = new ArrayList<Course>();
		for(int i= 0;i<timetable.length;i++) {
			if(timetable[i] == null) {
				break;
			}
			if(timetable[i].getWeekday().equals(weekday) == true)
				list.add(timetable[i]);
		}
		return list;
	}

	@Override
	public void diplayAllCourses() {
		for(int i = 0;i<timetable.length;i++) {
			if(timetable[i] == null) {
				break;
			}	
			System.out.println(timetable[i].toString());
		}
		
	}

}

TimetableDaoListImpl类实现用列表保存课程

import java.util.*;

public class TimetableDaoListImpl implements TimetableDao{
	
	private List <Course>timetable = new ArrayList<Course>();
	
	@Override
	public boolean addCourse(Course course) {
		timetable.add(course);
		return true;
	}

	@Override
	public List<Course> getCourseByname(String name) {
		List<Course> list = new ArrayList<Course>();
		for(Course temp:timetable) {
			if(temp.getName().equals(name)==true)
				list.add(temp);
		}
		return list;
	}

	@Override
	public List<Course> getCourseBytime(String weekday) {
		List<Course> list = new ArrayList<Course>();
		for(Course temp:timetable) {
			if(temp.getWeekday().equals(weekday)==true)
				list.add(temp);
		}
		return list;
	}

	@Override
	public void diplayAllCourses() {
		for(Course temp:timetable) {
			System.out.println(temp.toString());
		}
	}

}

测试代码

public class Test {

	public static void main(String[] args) {
		Course courses[]=new Course[8];
		courses[0] = new Course("算法设计与分析","xie","MONDAY");
		courses[1] = new Course("通信原理","zhang","MONDAY");
		courses[2] = new Course("算法设计与分析","xie","TUESDAY");
		courses[3] = new Course("大学英语","fang","TUESDAY");
		courses[4] = new Course("大学体育","huang","WEDNESDAY");
		courses[5] = new Course("java程序设计","zhen","THURSDAY");
		courses[6] = new Course("毛概","zhu","THURSDAY");
		courses[7] = new Course("数字逻辑","li","FRIDAY");
		
		System.out.println("===========添加课程=============");
		TimetableDao tmd = new TimetableDaoListImpl();//用列表实现;
		//TimetableDao tmd = new TimetableDaoArrayImpl(8);//用数组实现;
		for(Course t1:courses) {
			if(tmd.addCourse(t1) == true) {
				System.out.println("添加成功!");
			}
			else {
				System.out.println("添加失败!");
			}
		}
		System.out.println("==========显示课程表============");
		tmd.diplayAllCourses();
		System.out.println("========查询某课程安排============");
		for(Course t2:tmd.getCourseByname("算法设计与分析")) {
			System.out.println(t2.toString());
		}
		System.out.println("========查询某天的课程安排==========");
		for(Course t3:tmd.getCourseBytime("THURSDAY")) {
			System.out.println(t3.toString());
		}
		
	}
}

测试结果:

posted @ 2020-10-25 13:28  仙儿边  阅读(202)  评论(0编辑  收藏  举报