Java程序设计作业02 - DAO模式代码阅读及应用
1.StudenDaoListImpl.java与StudentDaoArrayImpl.java有何不同?
StudenDaoListImpl.java中使用了List来储存每个Student的数据,从而实现StudentDao接口;而StudentDaoArrayImpl.java中直接使用Student数组进行存储来实现StudentDao接口,该方式需要数组大小。
2.StudentDao.java文件是干什么用的?为什么里面什么实现代码都没有?
StudentDao.java定义并存放StudentDao接口,在这里面只有对方法的声明,因为根据实际情况不同,这些方法的实现方式可能不同。
3.使用搜索引擎搜索“Java DAO”,选出几句你能看懂的、对你最有启发的话。请结合接口知识去理解。
-
DAO (Data Access Objects 数据存取对象)通俗来讲,就是将数据库操作都封装起来。
DAO模式定义了一个接口,将对这个数据所需要的操作都封装起来,后面在对这个接口进行编程时,可以根据不同的类来决定接口中定义的这些方法该如何实现,用户无需知道其中的操作有何不同,只需要知道经过这个接口后,其最终结果都是一样的。 -
DAO 模式的优势就在于它隔离了不同数据库实现。
如同上一句话的理解中,不同数据库的类型并不会影响到DAO模式,例如本次作业样例中的List和数组的数据库类型,即使我要加入第三种数据库类型,我们也只需要在原有接口的基础上定义一个新的类去实现方法即可,不需要其他操作,最后也能获得与前两种数据库类型相同的结果。
4.尝试运行Test.java。根据注释修改相应代码。结合参考代码回答使用DAO模式有什么好处?
可以看出修改代码前后(分别使用List和数组),代码运行的结果都是一样的。DAO模式下,即使数据库的类型不同,方法实现的方式不同,但最终都会获得相同的结果。同时,DAO模式很适合程序的功能扩展和保证程序在不同数据存储类型下都能够正常运行,降低了各模块代码间的耦合度,提高了程序的灵活性。
5.编写一些使用DAO模式的代码。比如使用文件作为购物车存储底层。
Product 类
package shoppingcart;
public class Product {
private int num;
private String name;
private double price;
public Product(int num, String name, double price) {
this.num = num;
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "Product [num=" + num + ", name=" + name + ", price=" + price + "]";
}
}
ProductDAO 接口
package shoppingcart;
public interface ProductDAO {
public boolean addProduct(Product p);
public Product searchByName(String name);
public Product searchByNumber(int num);
public void showAll();
}
使用List实现接口
package shoppingcart;
import java.util.ArrayList;
import java.util.List;
public class ProductDAOListImpl implements ProductDAO {
private List<Product> p = new ArrayList<Product>();
@Override
public Product searchByName(String name) {
Product temp = null;
for(Product e : p){
if(e.getName().equals(name)){
temp = e;
}
}
return temp;
}
@Override
public Product searchByNumber(int num) {
Product temp = null;
for(Product e : p){
if(e.getNum() == num){
temp = e;
}
}
return temp;
}
@Override
public boolean addProduct(Product product) {
p.add(product);
return true;
}
@Override
public void showAll(){
for(Product e : p){
if (e != null)
System.out.println(e);
}
}
}
主函数测试:
1.添加4个商品;2.展示所有商品;3.搜索商品iPhone12;4.搜索商品5号