一、StudenDaoListImpl.java与StudentDaoArrayImpl.java有何不同?
StudenDaoListImpl与StudentDaoArrayImpl的不同之处在于它们如何存储和管理数据。StudenDaoListImpl使用了(ArrayList<Student>)来存储学生对象,而StudentDaoArrayImpl使用了数组(Student[])来存储学生对象。
二、StudentDao.java文件是干什么用的?为什么里面什么实现代码都没有?
StudentDao.java 是一个接口,它定义了与 Student 数据交互的一些基本操作,如添加学生 (addStudent),根据名字查询学生 (getStuByName) 和显示所有学生 (diplayAllStudents)。
为什么这个接口没有实现代码?因为接口只定义了方法签名,具体的实现方式由实现这个接口的类来决定。例如,StudentDaoArrayImpl 和 StudenDaoListImpl 都实现了这个接口,但它们的实现方式是不同的。
三、使用搜索引擎搜索“Java DAO”,选出几句你能看懂的、对你最有启发的话。请结合接口知识去理解。
DAO(Data Access Object)模式是一种设计模式,用于将数据存储的细节与应用程序的其余部分分离开来。它通过定义一个接口来抽象数据访问操作,并使用实现这个接口的类来提供具体的实现。
这种模式可以帮助我们实现数据的低耦合访问,提高代码的可维护性和可读性。
四、尝试运行Test.java。根据注释修改相应代码。结合参考代码回答使用DAO模式有什么好处?
分别运行使用列表和数组实现 StudentDao,可以发现输出相同。
(1)DAO模式提供了一种抽象层(接口)来处理数据访问,使得数据的具体存储方式(例如数据库、文件等)可以被轻易地替换。这有助于提高代码的可维护性和可扩展性。
(2)通过定义通用的数据访问接口,我们可以编写出更加灵活和可复用的代码。
(3)使用DAO模式可以更好地组织代码,并将业务逻辑与数据访问逻辑分离,使得代码更易于理解和维护。
五、可选:编写一些使用DAO模式的代码。比如使用文件作为购物车存储底层。
DAO模式的组成部分
- VO:值对象,此对象只包含属性,而没有方法;代表数据库中表中的一条记录,一个VO与一个表是相对应的
- DAO接口:定义对某个VO的所有操作
- DAO实现类:DAO接口的具体实现
- DAO工厂类:用来创建出DAO对象(可以没有)
VO :item
public class Item {
private int id;
private String name;
private double price;
public Item(int id, String name, double price) {
this.id = id;
this.name = name;
this.price = price;
}
@Override
public String toString() {
return "Item{" +
"id=" + id +
", name='" + name + '\'' +
", price=" + price +
'}';
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
DAO接口
public interface ShoppingCartDao {
public boolean addItem(Item item);
public List<Item> getAllItems();
//....还有很多方法可以写出,不过只是为了示范DAO模式
}
DAO实现类:DAO接口的具体实现
public class ShoppingCartDaoFileImpl implements ShoppingCartDao {
private String filePath;
public ShoppingCartDaoFileImpl(String filePath) {
this.filePath = filePath;
}
//把商品信息直接加入文件
@Override
public boolean addItem(Item item) {
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(filePath, true));
writer.write(item.getId() + "," + item.getName() + "," + item.getPrice());
writer.newLine();
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
//利用文件进行遍历
@Override
public List<Item> getAllItems() {
List<Item> items = new ArrayList<>();
try {
BufferedReader reader = new BufferedReader(new FileReader(filePath));
String line;
while ((line = reader.readLine()) != null) {
String[] parts = line.split(" ");
if (parts.length == 3) {
int id = Integer.parseInt(parts[0]);
String name = parts[1];
double price = Double.parseDouble(parts[2]);
items.add(new Item(id, name, price));
}
}
} catch (IOException e) {
e.printStackTrace();
}
return items;
}
}
- DAO工厂类:用来创建出DAO对象(可以没有)
public class Test {
public static void main(String[] args) {
ShoppingCartDao shoppingCartDao = new ShoppingCartDaoFileImpl("cart.txt");
Item item1 = new Item(1, "Product 1", 10.5);
Item item2 = new Item(2, "Product 2", 20.5);
shoppingCartDao.addItem(item1);
shoppingCartDao.addItem(item2);
List<Item> items = shoppingCartDao.getAllItems();
for (Item item : items) {
System.out.println(item.getName() + "-" + item.getPrice());
}
}
}