开发手册 欢迎您!
软件开发者资料库

数据访问对象模式

设计模式数据访问对象模式 - 学习Java设计模式简单,简单的步骤:包含有关其工厂模式,抽象工厂,单例,生成器,原型,适配器,桥,过滤器,复合启动一个java的设计模式,完整的知识初学者的教程,装饰,幕墙,飞锤,代理服务器,命令解释器,迭代器,中保,纪念品,观察员国,空对象,策略,模板,游客,MVC,前端控制器等。

数据访问对象模式或DAO模式用于将低级数据访问API或操作与高级业务服务分开.以下是数据访问对象模式的参与者.

  • 数据访问对象接口  - 此接口定义要对模型对象执行的标准操作.

  • 数据访问对象具体类  - 此类实现上述接口.此类负责从数据源获取数据,该数据源可以是database/xml或任何其他存储机制.

  • 模型对象或值对象  - 这个对象是包含get/set方法的简单POJO,用于存储使用DAO类检索的数据.

实现

我们将创建一个 Student 对象作为模型或值对象. StudentDao 是数据访问对象接口. StudentDaoImpl 是实现数据访问对象接口的具体类. DaoPatternDemo ,我们的演示类,将使用 StudentDao 来演示数据访问对象模式的使用.

数据访问对象模式UML图

步骤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 is working as a database   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");   }   //retrive list of students from the 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();      //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 databaseStudent: [RollNo : 0, Name : Michael ]