• 数据访问对象模式


    1.数据访问对象模式简介

    数据访问对象模式(Data Access Object Pattern)或 DAO 模式用于把低级的数据访问 API 或操作从高级的业务服务中分离出来。以下是数
    据访问对象模式的参与者。

    数据访问对象接口(Data Access Object Interface):该接口定义了在一个模型对象上要执行的标准操作。
    数据访问对象实体类(Data Access Object concrete class):该类实现了上述的接口。该类负责从数据源获取数据,数据源可以是数据库,也可以是 xml,或者是其他的存储机制。
    模型对象/数值对象(Model Object/Value Object):该对象是简单的 POJO,包含了 get/set 方法来存储通过使用 DAO 类检索到的数据。


    2.示例Demo

    import java.util.List;
    import java.util.ArrayList;
    
    interface StudentDao {
        List<Student> getAllStudents();
        void deleteStudent(int number);
        void updateStudent(int number, String name);
        void addStudent(Student student);
    }
    
    class StudentDaoImpl implements StudentDao {
        private List<Student> lists = new ArrayList<Student>();
    
        public List<Student> getAllStudents() {
            return lists;
        }
        public void deleteStudent(int number) {
            for (Student stu : lists) {
                if (stu.getNumber() == number) {
                    /*注意java中删除链表中元素是remove而不是delete*/
                    lists.remove(stu);
                    System.out.println("Delete student: name = " + stu.getName() + " number = " + stu.getNumber());
                }
            }
        }
        public void updateStudent(int number, String name) {
            for (Student stu : lists) {
                if (stu.getNumber() == number) {
                    /*注意换行时“+”要写在一行的最前面而不是上一行的后面,不能使用连接符""*/
                    System.out.println("Update student from: name = " + stu.getName() + " number = " + stu.getNumber()
                        + "  to: name = " + name + " number = " + number);
                    stu.setName(name);
                }
            }
        }
        public void addStudent(Student student) {
            lists.add(student);
            System.out.println("Add student: name = " + student.getName() + " number = " + student.getNumber());
        }
    }
    
    class Student {
        private String name;
        private int number;
    
        public Student(String name, int number) {
            this.name = name;
            this.number = number;
        }
    
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    
        public int getNumber() {
            return number;
        }
        public void setNumber(int number) {
            this.number = number;
        }
    }
    
    public class DaoPatternDemo {
        public static void main(String args[]) {
            StudentDao dao = createStudentDao();
            dao.updateStudent(2, "kitty");
    
            System.out.println("All students are:");
            for (Student stu : dao.getAllStudents()) {
                System.out.println("name = " + stu.getName() + " number = " + stu.getNumber());
            }
        }
    
        public static StudentDao createStudentDao() {
            StudentDao dao = new StudentDaoImpl();
            dao.addStudent(new Student("James", 1));
            dao.addStudent(new Student("jane", 2));
            dao.addStudent(new Student("lucy", 3));
            return dao;
        }
    }

    参考:http://www.runoob.com/design-pattern/data-access-object-pattern.html

  • 相关阅读:
    Selenium自动化测试-unittest单元测试框架
    Python 面向对象
    【新手总结】在.Net项目中使用Redis作为缓存服务
    asp.net性能优化之使用Redis缓存(入门)
    浅谈MVC、MVP、MVVM架构模式的区别和联系
    jquery uploadify在谷歌浏和火狐下无法上传的解决方案(.Net版)
    [翻译]NUnit---Action Attributes(八)
    [翻译]NUnit---String && Collection && File && Directory Assert (七)
    [翻译]NUnit---Exception && Utility Methods (六)
    [翻译]NUnit---Condition Asserts && Comparisons Asserts && Type Asserts (五)
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/10746135.html
Copyright © 2020-2023  润新知