java设计模式:DAO模式

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

java 设计模式:DAO 模式
java 设计模式:DAO 模式
导语:Java 是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java 语言具有功能强大和简单易用两个特征。

下面我们来看看DAO 模式,希望对大家有所帮助。

DAO 设计模式
★ DAO 的理解
1、DAO 其实是利用组合工厂模式来解决问题的,并没有带来新的功能,所以学的其实就是个思路。

2、DAO 理论上是没有层数限制的。

3、DAO 的各层理论上是没有先后的。

★ DAO 模式的本质
一层屏蔽一种变化 1 2 3 4 5 6 <strong>★DAO 基础
DAO 模式是标准的J2EE 设计模式之一.开发人员使用这个模式把底层的数据访问操作和上层的商务逻辑分开.一个典型的DAO 实现有下列几个组件:
1. 一个DAO 工厂类;
2. 一个DAO 接口;
3. 一个实现DAO 接口的具体类;
4. 数据传递对象(有些时候叫做值对象).</strong> 下面举例(多层dao 接口的实现)
具体实现:
1.dao 接口:
1
2
3
4
5 package cn.hncu.pattern.dao.dao; public interface DepDAO { public void create(String userId, String name); }
2.dao 工厂
1 2 3 package cn.hncu.pattern.dao.factory;
import cn.hncu.pattern.dao.dao.DepDAO;
import cn.hncu.pattern.dao.impl.a.factory.F2AFactory;
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
import cn.hncu.pattern.dao.impl.b.factory.F2BFactory; public class F1Factory {
private F1Factory(){
}
public static DepDAO getDepDAO(){
int type1=1;//第一层工厂的选择类型,按理应该从用户的`配置信息中读取,我们这里模拟了
if(type1==1){
return F2AFactory.getDepDAO(); }else if(type1==2){
return F2BFactory.getDepDAO(); }
return null;
}
}
3.dao 实现接口
第二层dao 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
package cn.hncu.pattern.dao.impl.a.factory; import cn.hncu.pattern.dao.dao.DepDAO; import cn.hncu.pattern.dao.impl.a.rdb.factory.F3A_RDB_Factory; import cn.hncu.pattern.dao.impl.b.factory.F2BFactory; public class F2AFactory { private F2AFactory() { } public static DepDAO getDepDAO() { int type2 = 3;// 第二层工厂的选择类型,按理应该从用户的配置信息中读取,我们这里模拟了 if (type2 == 1) { //return F3A_File_Factory.getDepDAO(); } else if (type2 == 2) { //return F3A_ODB_Factory.getDepDAO(); } else if (type2 == 3) { return F3A_RDB_Factory.getDepDAO(); }else if (type2 == 4) { //return F3A_XML_Factory.getDepDAO(); } return null; } }
1
8
1
9
2
2
1
2
2
2
3
2
4
2
5
1
2
3
4
5
6
7
8
9
10
11 package cn.hncu.pattern.dao.impl.b.factory; import cn.hncu.pattern.dao.dao.DepDAO; public class F2BFactory { private F2BFactory(){ } public static DepDAO getDepDAO(){ return null; } }
第三层dao 1 2 3 4 5 6 7 8 9 10 11 12 1package cn.hncu.pattern.dao.impl.a.rdb.factory; import cn.hncu.pattern.dao.dao.DepDAO;
import
cn.hncu.pattern.dao.impl.a.rdb.oracle.factory.F4A_RDB_Oracle_Factor y;
public class F3A_RDB_Factory {
private F3A_RDB_Factory(){
}
public static DepDAO getDepDAO(){
int type3 = 2;// 第3层工厂的选择类型,按理应该从用户的配置信息中读取,我们这里模拟了
if(type3==1){
//return F4A_RDB_MySQL_Factory.getDepDAO();
}else if(type3==2){
return
3 1
4 1
5 1
6 1
7 1
8
1
9
2
2
1 F4A_RDB_Oracle_Factory.getDepDAO();
}else if(type3==3){
//return
F4A_RDB_XML_Factory.getDepDAO();
}
return null;
}
}
第四层dao 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1package cn.hncu.pattern.dao.impl.a.rdb.oracle.factory; import cn.hncu.pattern.dao.dao.DepDAO;
import
cn.hncu.pattern.dao.impl.a.rdb.oracle.ejb.DepEjbImpl; import
cn.hncu.pattern.dao.impl.a.rdb.oracle.hibernate.DepHibernateImpl;
import
cn.hncu.pattern.dao.impl.a.rdb.oracle.jdbc.DepJdbcImpl;
import
cn.hncu.pattern.dao.impl.a.rdb.oracle.jpa.DepJpaImpl; public class F4A_RDB_Oracle_Factory {
private F4A_RDB_Oracle_Factory(){
}
public static DepDAO getDepDAO(){
int type4 = 1;// 第4层工厂的选择类型,按理应该从用户的配置信息中读取,我们这里模拟了
if(type4==1){
return new DepEjbImpl();
}else if(type4==2){
return new DepHibernateImpl(); }else if(type4==3){
return new DepJdbcImpl();
}else if(type4==4){
8 19 20 21
2
2
2
3
2
4
2
5
2
6
2
7
return new DepJpaImpl();
}
return null;
}
}
实现类: 1 2 3 4 5 6 7 8 9 10
package cn.hncu.pattern.dao.impl.a.rdb.oracle.ejb; import cn.hncu.pattern.dao.dao.DepDAO; public class DepEjbImpl implements DepDAO{ @Override public void create(String userId, String name) { System.out.println("利用DepEjbImpl 向数据库写入:"+userId+","+name); } } 1 2 3 4 5 6 7 8 9 10 package
cn.hncu.pattern.dao.impl.a.rdb.oracle.hibernate; import cn.hncu.pattern.dao.dao.DepDAO;
public class DepHibernateImpl implements DepDAO{ @Override
public void create(String userId, String name) { System.out.println("利用DepHibernateImpl 向数据库写入:"+userId+","+name);
}
}
1 2 3 4 package cn.hncu.pattern.dao.impl.a.rdb.oracle.jdbc; import cn.hncu.pattern.dao.dao.DepDAO;
public class DepJdbcImpl implements DepDAO{ @Override
5 6 7 8 9 10 public void create(String userId, String name) {
System.out.println("利用DepJdbcImpl向数据库写
入:"+userId+","+name);
}
}
1 2 3 4 5 6 7 8 9 10 package cn.hncu.pattern.dao.impl.a.rdb.oracle.jpa;
import cn.hncu.pattern.dao.dao.DepDAO;
public class DepJpaImpl implements DepDAO{
@Override
public void create(String userId, String name) {
System.out.println("利用DepJpaImpl向数据库写入:"+userId+","+name);
}
}
测试:
1
2 3 4 5 6 7 8 9
10
11
12 package cn.hncu.pattern.dao;
import cn.hncu.pattern.dao.dao.DepDAO;
import cn.hncu.pattern.dao.factory.F1Factory; //本类是dao层的用户,相当于逻辑层
public class Client {
public static void main(String[] args) { DepDAO dao = F1Factory.getDepDAO();
dao.create("1001", "Jack");
}
}
测试结果:
1 利用DepEjbImpl向数据库写入:1001,Jack
【java设计模式:DAO模式】。

相关文档
最新文档