[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
[Design Pattern] DAO Pattern 简单案例的更多相关文章
- [Design Pattern] Facde Pattern 简单案例
Facade Pattern, 即外观模式,用于隐藏复杂的系统内部逻辑,提供简洁的接口给客户端调用,属于结构类的设计模式.我会将其名字理解为,门户模式. 下面是 Facade Pattern 的一个简 ...
- [Design Pattern] Front Controller Pattern 简单案例
Front Controller Pattern, 即前端控制器模式,用于集中化用户请求,使得所有请求都经过同一个前端控制器处理,处理内容有身份验证.权限验证.记录和追踪请求等,处理后再交由分发器把请 ...
- [Design Pattern] Observer Pattern 简单案例
Observer Pattern,即观察者模式,当存在一对多关系,例如一个对象一有变动,就要自动通知被依赖的全部对象得场景,属于行为类的设计模式. 下面是一个观察者模式的简单案例. Observer ...
- [Design Pattern] Mediator Pattern 简单案例
Meditor Pattern,即调解模式,用一个调解类类处理所有的沟通事件,使得降低多对象之间的沟通难度,属于行为类的设计模式.为了方便理解记忆,我也称其为,沟通模式. 下面是一个调解模式的简单案例 ...
- [Design Pattern] Iterator Pattern 简单案例
Iterator Pattern,即迭代时模式,按照顺序依次遍历集合内的每一个元素,而不用了解集合的底层实现,属于行为类的设计模式.为了方便理解记忆,我也会称其为遍历模式. 下面是一个迭代器模式的简单 ...
- [Design Pattern] Command Pattern 简单案例
Command Pattern, 即命令模式,把一个命令包裹在一个对象里面,将命令对象传递给命令的执行方,属于行为类的设计模式 下面是命令模式的一个简单案例. Stock 代表被操作的对象.Order ...
- [Design Pattern] Proxy Pattern 简单案例
Proxy Pattern, 即代理模式,用一个类代表另一个类的功能,用于隐藏.解耦真正提供功能的类,属于结构类的设计模式. 下面是 代理模式的一个简单案例. Image 定义接口,RealImage ...
- [Design Pattern] Flywight Pattern 简单案例
Flywight Pattern, 即享元模式,用于减少对象的创建,降低内存的占用,属于结构类的设计模式.根据名字,我也将其会理解为 轻量模式. 下面是享元模式的一个简单案例. 享元模式,主要是重用已 ...
- [Design Pattern] Filter Pattern 简单案例
Filter Pattern,即过滤模式,通过不同的过滤标准,或者低耦合将过滤标准组合在一起,对一组对象进行过滤,属于结构类的设计模式. 下面是一个过滤模式的简单案例. Criteria 定义过滤接口 ...
随机推荐
- Gson解析json数据(转)
一. www.json.org这是JSON的官方网站. 首先,我,我们需要在code.google.com/p/google-gson/downloads/list下载JSON的jar包,解析后把gs ...
- oracle 添加自增索引
1.添加一个Sequence,此处为ID_SEQUENCE. 2.添加对应表,并设置主键 3.设置触发器 create or replace trigger sys.id_add before ins ...
- 转载:C#中事件和委托的编译代码
接上文转载:C#中事件的由来,这时候,我们注释掉编译错误的行,然后重新进行编译,再借助Reflactor来对 event的声明语句做一探究,看看为什么会发生这样的错误: public event Gr ...
- .NET aspx页面中的按钮无法响应事件
原因只有一个,页面中存在多个form标签.按Ctrl+F,找到多余的删掉即可
- angular-ui-tree
angular-ui-tree的github项目地址:https://github.com/angular-ui-tree/angular-ui-tree DEMO目录结构如下: bootstrap. ...
- ASP.NET实现文件下载
转:http://blog.csdn.net/codeshark/article/details/2473664 方式一:TransmitFile实现下载.将指定的文件直接写入 HTTP 响应输出流, ...
- 六、C# 派生
派生 对一个现有的类型进行扩展,以便添加更多的功能,或者对现有的类型的操作进行重写. 比如可以将两个类都适用的方法和属性,用一个新的类进行重构,两个类再分别继承这个类. 定义一个派生类时,要在 ...
- 通过Unity依赖注入
前言 Unity容器的思想起始于我在为Web Client Sofitware Factory项目工作的时候,微软的patterns&practices团队已经使用依赖注入的概念好几年了在那时 ...
- SSM框架入门和搭建 十部曲
又快到毕业设计的时候了,有的学弟说想用ssm做毕业设计,在网上找到资料看不懂,基础差.我就帮他写了一个demo,顺便也整理一下. SSM框架,顾名思义,就是Spring+SpringMVC+mybat ...
- thinkphp 邮件发送
最近项目上要求,要做个邮件发送的功能,因为用到的框架是ThinkPHP,于是就自己整理一下. 引入class.phpmailer.php,大家可以去这个链接去下载: http://pan.baidu. ...