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

    测试结果:

  • 相关阅读:
    OSI安全体系结构
    PHP 二维数组根据相同的值进行合并
    Java实现 LeetCode 17 电话号码的字母组合
    Java实现 LeetCode 16 最接近的三数之和
    Java实现 LeetCode 16 最接近的三数之和
    Java实现 LeetCode 16 最接近的三数之和
    Java实现 LeetCode 15 三数之和
    Java实现 LeetCode 15 三数之和
    Java实现 LeetCode 15 三数之和
    Java实现 LeetCode 14 最长公共前缀
  • 原文地址:https://www.cnblogs.com/xianerbian/p/13872462.html
Copyright © 2020-2023  润新知