設計模式之資料訪問物件模式(Data Access Object Pattern)
阿新 • • 發佈:2018-12-21
資料訪問物件模式(Data Access Object Pattern)或 DAO 模式用於把低階的資料訪問 API 或操作從高階的業務服務中分離出來。以下是資料訪問物件模式的參與者
資料訪問物件介面(Data Access Object Interface) - 該介面定義了在一個模型物件上要執行的標準操作。
資料訪問物件實體類(Data Access Object concrete class) - 該類實現了上述的介面。該類負責從資料來源獲取資料,資料來源可以是資料庫,也可以是 xml,或者是其他的儲存機制。
模型物件/數值物件(Model Object/Value Object) - 該物件是簡單的 POJO,包含了 get/set 方法來儲存通過使用 DAO 類檢索到的資料。
程式碼:
1.數值物件
//數值物件 public class Student { private String name; private int rollNo; public Student() { super(); } public Student(String name, int rollNo) { super(); this.name = name; this.rollNo = rollNo; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getRollNo() { return rollNo; } public void setRollNo(int rollNo) { this.rollNo = rollNo; } @Override public String toString() { return "Student [name=" + name + ", rollNo=" + rollNo + "]"; } }
2.資料訪問物件介面
//資料訪問物件介面
public interface StudentDao {
public List<Student> getAllStudents();
public Student getStudent(int rollNo);
public void updateStudent(Student student);
public void deleteStudent(Student student);
}
實現類
public class StudentDaoImpl implements StudentDao{ //資料集 private List<Student> students; public StudentDaoImpl(List<Student> students) { super(); this.students = students; } public StudentDaoImpl() { super(); students=new ArrayList<Student>(); Student student1=new Student("zhangsan",1); Student student2=new Student("lisi",2); students.add(student1); students.add(student2); } @Override public List<Student> getAllStudents() { return students; } @Override public Student getStudent(int rollNo) { return students.get(rollNo); } @Override public void updateStudent(Student student) { //模擬 students.get(student.getRollNo()).setName(student.getName()); System.out.println("資料更新"); } @Override public void deleteStudent(Student student) { students.remove(student.getRollNo()); System.out.println("資料刪除"); } }
3.測試
public class Test {
public static void main(String[] args) {
StudentDao studentDao=new StudentDaoImpl();
List<Student> list=studentDao.getAllStudents();
//顯示所有學生
for (Student student : list) {
System.out.println(student.toString());
}
System.out.println("---------------------");
//更新所有學生
Student student=studentDao.getStudent(0);
student.setName("Tom");
studentDao.updateStudent(student);
System.out.println("---------------------");
//獲取學生
student=studentDao.getStudent(0);
System.out.println(student.toString());
}
}
4.測試結果
Student [name=zhangsan, rollNo=1]
Student [name=lisi, rollNo=2]
---------------------
資料更新
---------------------
Student [name=Tom, rollNo=1]
5.結論
一個POJO,一個介面,程式設計。
轉載於
http://www.runoob.com/design-pattern/data-access-object-pattern.html