1. 程式人生 > >設計模式之資料訪問物件模式(Data Access Object Pattern)

設計模式之資料訪問物件模式(Data Access Object Pattern)

資料訪問物件模式(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