Java設計模式
Java工廠設計模式
Java抽象工廠模式
Java單例模式
Java建造者(Builder)模式
Java原型模式
Java適配器模式
Java橋接模式
Java過濾器模式(條件模式)
Java組合模式
Java裝飾模式
Java門面模式(或外觀模式)
Java享元模式(Flyweight Pattern)
Java責任鏈模式
Java命令模式
Java迭代器模式
Java中介者模式(Mediator Pattern)
Java解釋器模式
Java備忘錄模式
Java觀察者模式
Java狀態模式
Java空對象模式
Java策略模式
Java模板模式
Java訪問者模式
Java MVC模式
Java業務代理模式
Java組合實體模式
Java數據訪問對象模式
Java前端控制器模式
Java攔截過濾器模式
Java服務定位器模式
Java傳輸對象模式
Java數據訪問對象模式
數據訪問對象模式或DAO模式用於將低級數據訪問API或操作與高級業務服務分離。 以下是數據訪問對象模式的參與者。
- 數據訪問對象接口 - 此接口定義要對模型對象執行的標準操作。
- 數據訪問對象具體類 - 此類實現上述接口。 這個類負責從數據源獲取數據,數據源可以是數據庫/xml或任何其他存儲機制。
- 模型對象或值對象 - 此對象是簡單的POJO,包含用於存儲使用DAO類檢索的數據的
get/set
方法。
實現實例
在這個將創建一個作爲Model
或Value
對象的Student
對象。 StudentDao
是數據訪問對象接口。 StudentDaoImpl
是實現數據訪問對象接口的具體類。 DaoPatternDemo這是一個演示類,將使用StudentDao
演示使用數據訪問對象模式。
數據訪問對象模式示例的結構如下圖所示 -
第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<Student> 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 is working as a database
List<Student> students;
public StudentDaoImpl(){
students = new ArrayList<Student>();
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");
}
//retrive list of students from the database
@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("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();
//print all students
for (Student student : studentDao.getAllStudents()) {
System.out.println("Student: [RollNo : " + student.getRollNo() + ", Name : " + student.getName() + " ]");
}
//update student
Student student =studentDao.getAllStudents().get(0);
student.setName("Michael");
studentDao.updateStudent(student);
//get the 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 ]