java设计模式--DAO模式
2017-08-08 20:35
393 查看
DAO设计模式
★ DAO的理解1、DAO其实是利用组合工厂模式来解决问题的,并没有带来新的功能,所以学的其实就是个思路。
2、DAO理论上是没有层数限制的。
3、DAO的各层理论上是没有先后的。
★ DAO模式的本质
一层屏蔽一种变化
★ DAO基础 DAO模式是标准的J2EE设计模式之一.开发人员使用这个模式把底层的数据访问操作和上层的商务逻辑分开.一个典型的DAO实现有下列几个组件: 1. 一个DAO工厂类; 2. 一个DAO接口; 3. 一个实现DAO接口的具体类; 4. 数据传递对象(有些时候叫做值对象).
下面举例(多层dao接口的实现)
具体实现:
1.dao接口:
package cn.hncu.pattern.dao.dao; public interface DepDAO { public void create(String userId, String name); }2.dao工厂
package cn.hncu.pattern.dao.factory; import cn.hncu.pattern.dao.dao.DepDAO; import cn.hncu.pattern.dao.impl.a.factory.F2AFactory; 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
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; } }
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
package 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_Factory; 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 F4A_RDB_Oracle_Factory.getDepDAO(); }else if(type3==3){ //return F4A_RDB_XML_Factory.getDepDAO(); } return null; } }
第四层dao
package 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){ return new DepJpaImpl(); } return null; } }实现类:
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); } }
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); } }
package cn.hncu.pattern.dao.impl.a.rdb.oracle.jdbc; import cn.hncu.pattern.dao.dao.DepDAO; public class DepJdbcImpl implements DepDAO{ @Override public void create(String userId, String name) { System.out.println("利用DepJdbcImpl向数据库写入:"+userId+","+name); } }
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); } }测试:
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"); } }
测试结果:
利用DepEjbImpl向数据库写入:1001,Jack
相关文章推荐
- Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之09.JDBC DAO设计模式
- JavaBean中DAO设计模式介绍
- jsp+javaBean(模拟购物车)(DAO设计模式的应用)
- Java---设计模式(DAO)
- JavaBean中DAO设计模式介绍
- java之 ------ DAO设计模式的【具体解释】及常见设计模式的【应用】
- java DAO设计模式
- java中的DAO设计模式
- Java -- JDBC_DAO 设计模式
- javaee 数据库操作DAO工厂设计模式
- Java 分层设计(DAO设计模式)
- 基于泛型DAO的Facade设计模式. - Hibernate - Java
- 浅谈java中dao工厂设计模式
- java dao设计模式
- java DAO设计模式
- JAVA入门,DAO设计模式
- java-DAO设计模式
- java设计模式(2)------DAO模式
- JavaBean中DAO设计模式介绍
- JAVA入门,DAO设计模式