java設計模式-數據訪問對象模式

數據訪問對象模式(Data Access Object Pattern)或 DAO 模式用於把低級的數據訪問 API 或操作從高級的業務服務中分離出來。以下是數據訪問對象模式的參與者。

· 數據訪問對象接口(Data Access Object Interface) - 該接口定義了在一個模型對象上要執行的標準操作。

· 數據訪問對象實體類(Data Access Object concrete class) - 該類實現了上述的接口。該類負責從數據源獲取數據,數據源可以是數據庫,也可以是 xml,或者是其他的存儲機制。

· 模型對象/數值對象(Model Object/Value Object) - 該對象是簡單的 POJO,包含了 get/set 方法來存儲通過使用 DAO 類檢索到的數據。

實現

我們將創建一個作為模型對象或數值對象的 Student 對象。StudentDao 是數據訪問對象接口。StudentDaoImpl 是實現了數據訪問對象接口的實體類。DaoPatternDemo,我們的演示類使用 StudentDao 來演示數據訪問對象模式的用法。

java設計模式-數據訪問對象模式

步驟 1

創建數值對象。

Student.java

public class Student {

private String name;

private int rollNo;

Student(String name, int rollNo){

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;

}

}

步驟 2

創建數據訪問對象接口。

StudentDao.java

import java.util.List;

public interface StudentDao {

public List getAllStudents();

public Student getStudent(int rollNo);

public void updateStudent(Student student);

public void deleteStudent(Student student);

}

步驟 3

創建實現了上述接口的實體類。

StudentDaoImpl.java

import java.util.ArrayList;

import java.util.List;

public class StudentDaoImpl implements StudentDao {

//列表是當作一個數據庫

List students;

public StudentDaoImpl(){

students = new ArrayList();

Student student1 = new Student("Robert",0);

Student student2 = new Student("John",1);

students.add(student1);

students.add(student2);

}

@Override

public void deleteStudent(Student student) { students.remove(student.getRollNo());

System.out.println("Student: Roll No " + student.getRollNo() +", deleted from database");

}

//從數據庫中檢索學生名單

@Override

public List 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("Student: Roll No " + student.getRollNo() +", updated in the database");

}

}

步驟 4

使用 StudentDao 來演示數據訪問對象模式的用法。

DaoPatternDemo.java

public class DaoPatternDemo {

public static void main(String[] args) {

StudentDao studentDao = new StudentDaoImpl();

//輸出所有的學生

for (Student student : studentDao.getAllStudents()) {

System.out.println("Student: [RollNo : " +student.getRollNo()+", Name : "+student.getName()+" ]")

; }

//更新學生

Student student =studentDao.getAllStudents().get(0);

student.setName("Michael");

studentDao.updateStudent(student);

//獲取學生

studentDao.getStudent(0);

System.out.println("Student: [RollNo : " +student.getRollNo()+", Name : "+student.getName()+" ]");

}

}

步驟 5

執行程序,輸出結果:

Student: [RollNo : 0, Name : Robert ]

Student: [RollNo : 1, Name : John ]

Student: Roll No 0, updated in the database

Student: [RollNo : 0, Name : Michael ]


分享到:


相關文章: