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