当前位置 博文首页 > 文章内容

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

    作者: 栏目:未分类 时间:2020-10-25 8:59:56

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    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模式的代码。比如使用文件作为购物车存储底层。