DAO模式是接口的一个典型应用。

阅读附件中的参考代码:

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

  • 二者的数据存储方式不同,对应方法的实现也因此而不同。StudenDaoListImpl.java中是用List存储的,StudentDaoArrayImpl.java中是用数组形式存储的。相对来说,用List存储的话,在写对应方法的时候,代码会更简洁一些。这一点从addStudent(Student student)这个方法可以很明显地看出来,用List一行代码结束的事情,数组还需要循环遍历判断是否已存在这个数据,二者的代码复杂度完全就不一样。

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

  • 用处:StudentDao是一个接口,用于存放业务逻辑。大概就是对方法的一个集合。
  • 原因:正因为它没有实现的代码,所以这些方法可以在不同的类中有不同的实现方法。它只是确定了方法,但对于具体的实现,没有明确,这意味着我们可以根据自己的需求设计不同的实现代码。接口中的方法就像是不同的行为,不同的对象实现这个行为的方法也是不同的。举例来说,同样是吃饭,我可能是用勺子吃,其他人可能是用筷子/叉子吃。

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

  • “DAO 模式的优势就在于它实现了两次隔离。一是隔离了数据访问代码和业务逻辑代码。二是隔离了不同数据库实现。”:
    • 第一个隔离的意思,应该与上述的问题2类似。定义的接口中存放了业务逻辑代码(也就是方法),然后定义不同的实现,进行数据的访问。这二者,接口决定后一般是不变的,但是实现是可以根据需求而改变的。在我们使用的时候,传参什么的都是一样的,虽然它实现的代码可能会因为不同的存储结构而有所不同,但是方法决定之后,它实现的功能是一样的,等于说,我们能够更改的是,达成这个结果的过程。所以说,我们调用的时候,它内部运行的代码可能不一样,但是结果是相似的。而且,我们在写实现的时候,是面向对应的接口写的,那么,我们在使用的时候,就不需要考虑它后台到底是用的什么存储结构,不用担心说,想使用这个方法就必须要用特定的类型存储啊什么的。
    • 第二个隔离的话,应该是说,在后续如果它的数据库有变,我们不需要对原先的进行修改,可以直接添加一个实现类。比如说最开始数据用数组存储,但是后来发现数组不方便,想改用list或是其他的存储结构,那么可以另外写一个实现,不用对原先的数组的代码进行修改,只需要另外添加就可以了。然后在使用的时候,只需要用对应的实现就可以啦。这样的话,可以写多种不同的实现,使用的时候想用哪个哪种合适用哪个,就很方便不是嘛?
  • “DAO接口: 把对数据库的所有操作定义成抽象方法,可以提供多种实现。”:
    • 方法,可以理解成我们的一切动态的行为,接口,就是方法,也就是一些行为的合集,拿购物车来说,就包括放入商品、删除商品,计算商品总价等等。我的理解就是,你在写一个程序的时候,在接口中把你要实现的方法先确定下来,有点像是写作文之前的大纲一样的东西,只是在规划,我需要写写什么方法,写完这个之后,对应的实现类就是我们把作文大纲内容具体化一样。反过来,写完之后,我们看这个接口的内容,它又有点像目录,涵盖了所有的方法。

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


  • 比较上述俩张图片,我们看到,虽然它的实现是不一样的,但是它的输出结果是一样的。
  • 好处:
    • 往后台写数据的时候,不用考虑后台的数据结构到底是什么。它们的实现类都是面向接口的,接口中的方法定下来以后,可根据需要,根据不同的数据结构的特点,编写对应的实现代码。
    • 使接口和实现分离,提高代码的灵活性。就是问题3提到的第一次隔离。这里不再重复写了。。

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