zoukankan      html  css  js  c++  java
  • 接口-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());
    		}
    		
    	}
    }
    
    

    测试结果:

  • 相关阅读:
    Python 学习笔记:需要仔细阅读一个函数
    asp.net 实现一个简单CAS Server
    用代码旋转屏幕
    Cassandra API60 Java 代码示例
    Ajax跨域访问代理类,支持GET和POST方法
    Android 给自己的类加个事件
    Python 学习笔记: 备份工具
    Android SQLiteHelper
    转:在 CLI 中練習 Data Model
    Java修饰符public,private,protected及默认的区别
  • 原文地址:https://www.cnblogs.com/xianerbian/p/13872462.html
Copyright © 2011-2022 走看看