• OO之接口-DAO模式代码阅读及应用


    DAO模式代码阅读及应用

    疑难问题

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

    答:StudenDaoListImpl.java文件是用链表来存储学生信息而,StudentDaoArrayImpl.java文件使用数组存储学生信息。都是实现了查找学生的方法,但由于StudenDaoListImpl.java文件是用链表,所以从头开始直接判断,到空为结束,直到找到学生返回。而StudentDaoArrayImpl.java文件是用数组,在遍历过程中,有可能会遇到姓名为空的情况,这时就要判断是否为空,不为空才能比较是否找到学生。在实现增加增加学生的方法,链表直接使用自带add方法增加。而数组要遍历整个数组,找到空的地方进行存储,有可能会遇到数组满的情况。在实现输出所有学生信息的方法,两者大致相同。

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

    答:在StudentDao.java文件中定义了一个StudentDao接口,里面有三个方法的声明,其他类通过继承StudentDao类,实现StudentDao.java文件中的方法,这样可以子类有着相同的三个方法声明,不同的子类根据不同的数据不同的存储方式写出不一样的方法代码。

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

    答:隔离了数据访问代码和业务逻辑代码。业务逻辑代码直接调用DAO方法即可,完全感觉不到数据库表的存在。分工明确,数据访问层代码变化不影响业务逻辑代码,这符合单一职能原则,降低了藕合性,提高了可复用性。通过DAO接口,访问DAO方法来解决问题,子类继承针对出不同的数据库可以写出不同的内部方法,通过DAO接口访问子类,使用子类方法,修改子类数据库代码数据,不会影响到DAO接口的使用,不同数据库对应不同的DAO方法代码,是的数据访问代码与业务逻辑代码隔离。

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

    数组实现

    package stumanagement;
    
    public class Test {
    
    	public static void main(String[] args) {
    		Student[] students = new Student[4];
    		students[0] = new Student("Tom");
    		students[1] = new Student("Jerry");
    		students[2] = new Student("Sophia");
    		students[3] = new Student("ding");
    		
    		StudentDao sdm = new StudentDaoArrayImpl(50);// 使用数组实现
    		//StudentDao sdm = new StudenDaoListImpl();//使用列表实现
    
    		// 往后台写数据,无需考虑后台是什么(到底是数据库、文件、数组、List)
    		// 因为这里是面向StudentDao接口
    		System.out.println("===========写入学生========");
    		for (Student e : students) {
    			if (!sdm.addStudent(e)) {
    				System.out.println("添加学生失败");
    			} else {
    				System.out.println("插入成功!!");
    			}
    		}
    		System.out.println("===========显示所有学生========");
    		sdm.diplayAllStudents();
    		System.out.println("===========查询学生========");
    		Student temp = sdm.getStuByName("Tom");
    		if (temp == null) {
    			System.out.println("查无此人");
    		} else {
    			System.out.println(temp);
    		}
    
    	}
    
    }
    
    

    列表实现

    package stumanagement;
    
    public class Test {
    
    	public static void main(String[] args) {
    		Student[] students = new Student[4];
    		students[0] = new Student("Tom");
    		students[1] = new Student("Jerry");
    		students[2] = new Student("Sophia");
    		students[3] = new Student("ding");
    		
    		//StudentDao sdm = new StudentDaoArrayImpl(50);// 使用数组实现
    		StudentDao sdm = new StudenDaoListImpl();//使用列表实现
    
    		// 往后台写数据,无需考虑后台是什么(到底是数据库、文件、数组、List)
    		// 因为这里是面向StudentDao接口
    		System.out.println("===========写入学生========");
    		for (Student e : students) {
    			if (!sdm.addStudent(e)) {
    				System.out.println("添加学生失败");
    			} else {
    				System.out.println("插入成功!!");
    			}
    		}
    		System.out.println("===========显示所有学生========");
    		sdm.diplayAllStudents();
    		System.out.println("===========查询学生========");
    		Student temp = sdm.getStuByName("Tom");
    		if (temp == null) {
    			System.out.println("查无此人");
    		} else {
    			System.out.println(temp);
    		}
    
    	}
    
    }
    

    两种不同的子类实现同样的结果,子类内部存储不同,代码方式不同。

    答:通过DAO接口,访问子类,建立子类的数据数组,就想StudentDao sdm = new StudentDaoArrayImpl(50);通过子类建立了子类数组,通过子类自己内部特定方法进行使用,插入、显示、查询学生,然后换成StudentDao sdm = new StudenDaoListImpl();建立子类链表数据,也还是根据链表子类自身内部方法来实现插入、显示、查询方法,通过DAO接口,使用不同的子类,使用子类内部方法,这样使得可以在不同数据处理更加方便,通过写出DAO接口,根据接口方法,写出不同数据存储方式的方法,使用不同数据处理更加便捷。

    5.可选:编写一些使用DAO模式的代码。比如使用文件作为购物车存储底层。

  • 相关阅读:
    ERROR Invalid input of type: 'bool'. Convert to a bytes, string, int or float first.
    python2中正则通过全部中文字符
    查询正在执行的SQL
    dataguard 备库删除已应用过的过期归档
    linux lrzsz上传下载
    /u01/app/11.2.0.4/grid/perl/bin/perl -I/u01/app/11.2.0.4/grid/perl/lib -I/u01/app/11.2.0.4/grid/crs/install /u01/app/11.2.0.4/grid/crs/install/rootcrs.pl execution failed
    重启网卡提示Bringing up interface eth0 Device eth0 does not seem to be present,delaying initialization [FAILED]
    rhel 7 RAC安装执行root.sh遭遇ohasd failed to start,Failed to start the Clusterware. Last 20 lines of the alert log follow
    Error in invoking target 'agent nmhs' of makefile...MK_EMAGENT_NMECTL修正
    oracle 11g RAC由非归档修改成归档
  • 原文地址:https://www.cnblogs.com/jiuweihong/p/13870198.html
Copyright © 2020-2023  润新知