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 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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 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 13 14 15 16 17 18 19 20 21 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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 ; } } |
实现类:
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 5 6 7 8 9 10 | 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); } } |
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模式】相关文章:
JAVA设计模式之单例模式11-23
Java的设计模式编程中责任链模式的运用的实例讲解12-01
该怎么使用Java设计模式编程中的OCP开闭原则?11-23
Java开发策略模式的简单应用实现方法11-30
PHP中的设计模式详解08-15
海关通关作业新模式11-12