zoukankan      html  css  js  c++  java
  • [Design Pattern] DAO Pattern 简单案例

    Data Access Object Pattern, or DAO Pattern, 即 DAO 模式,用于分离底层的数据访问接口,已经上层的业务逻辑。

    下面是 Dao 模式的一个简单的案例。

    Student 是纯 Java Beans 类。StudentDao 定义 Dao 的访问接口,StudentDaoImpl 实现该接口。 DaoPatternDemo 演示 Dao 模式

    代码实现

    Student ,是纯数据对象

    public class Student implements Cloneable {
    
        private String name;
        private int rollNo;
        
        public 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 String toString(){
            return "[name : " + name + ", rollNo : " + rollNo + "]";
        }
        
        public Object clone() {
            Student newStud = new Student(this.name, this.rollNo);
            return newStud;
        }
    }

    StudentDao 定义 Dao 接口

    import java.util.List;
    
    public interface StudentDao {
        
        public List<Student> getAllStudents();
        
        public void updateStudent(Student student);
        
        public void deleteStudent(Student student);
        
        public void addStudent(Student student);
    
    }

    StudentDaoImpl 是 Dao 的具体类,实现 Dao 接口

    import java.util.Hashtable;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Map;
    
    public class StudentDaoImpl implements StudentDao {
    
        private Map<Integer, Student> no_stud;
            
        public StudentDaoImpl(){
            no_stud = new Hashtable<Integer, Student>();
            Student studa = new Student("aa", 0);
            Student studb = new Student("bb", 1);
            no_stud.put(studa.getRollNo(), studa);
            no_stud.put(studb.getRollNo(), studb);
        }
        
        @Override
        public List<Student> getAllStudents() {
            List<Student> students = new LinkedList<>(no_stud.values());
            return students;
        }
    
        @Override
        public void updateStudent(Student student) {
            no_stud.get(student.getRollNo()).setName(student.getName());
        }
    
        @Override
        public void deleteStudent(Student student) {
            no_stud.remove(student.getRollNo());
        }
    
        @Override
        public void addStudent(Student student) {
            if (no_stud.containsKey(student.getRollNo())){
                System.out.println(" duplicate student No. cannot add ");
            }
            else{
                no_stud.put(student.getRollNo(), student);
            }
        }
        
        public Student getFirstStudentCopy(){
            Student student = (Student)no_stud.get(0).clone();
            return student;
        }
    }

    演示 Dao 模式。注,代码中 StudentDaoImpl::getFirstStudentCopy ,是为了演示 StudentDaoImpl::updateStudent 而出现的 ,但并未出现在 UML  图中。

    public class DaoPatternDemo {
    
        public static void main(){
            
            StudentDaoImpl studentDaoImpl = new StudentDaoImpl();
            System.out.println(studentDaoImpl.getAllStudents());
            
            Student student = studentDaoImpl.getFirstStudentCopy();
            student.setName("sss");    
            System.out.println(studentDaoImpl.getAllStudents());
    
            studentDaoImpl.updateStudent(student);        
            System.out.println(studentDaoImpl.getAllStudents());
        }
    }

    参考资料

    Data Access Object Pattern, TutorialsPoint

  • 相关阅读:
    Linux常用命令-centos
    USACO 2006 Open, Problem. The Country Fair 动态规划
    USACO 2007 March Contest, Silver Problem 1. Cow Traffic
    USACO 2007 December Contest, Silver Problem 2. Building Roads Kruskal最小生成树算法
    USACO 2015 February Contest, Silver Problem 3. Superbull Prim最小生成树算法
    LG-P2804 神秘数字/LG-P1196 火柴排队 归并排序, 逆序对
    数据结构 并查集
    浴谷国庆集训 对拍
    1999 NOIP 回文数
    2010 NOIP 普及组 第3题 导弹拦截
  • 原文地址:https://www.cnblogs.com/TonyYPZhang/p/5516059.html
Copyright © 2011-2022 走看看