zoukankan      html  css  js  c++  java
  • 互评-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模式的代码。比如使用文件作为购物车存储底层。

  • 相关阅读:
    Go
    Go
    Go -11 Go 框架beego的简单 create run
    文本处理工具之:grep sed awk
    Linux系统布置java项目
    docker 启动mysql 本地连接
    time
    多行查询数据合并成一行进行展示
    settings的使用
    xlsxwriter
  • 原文地址:https://www.cnblogs.com/shenchao123/p/13872485.html
Copyright © 2011-2022 走看看