荟萃馆

位置:首页 > 计算机 > java语言

java设计模式:DAO模式

java语言1.57W

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

java设计模式:DAO模式

  DAO设计模式

  ★ DAO的理解

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

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

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

  ★ DAO模式的本质

  一层屏蔽一种变化

123456<strong>★DAO基础 DAO模式是标准的J2EE设计模式之一.开发人员使用这个模式把底层的数据访问操作和上层的商务逻辑分开.一个典型的'DAO实现有下列几个组件: 1. 一个DAO工厂类; 2. 一个DAO接口; 3. 一个实现DAO接口的具体类; 4. 数据传递对象(有些时候叫做值对象).</strong>

下面举例(多层dao接口的实现)

  具体实现:

接口:

12345package ; public interface DepDAO { public void create(String userId, String name); }

工厂

12345678910111213141516171819package ory; import AO; import ory.F2AFactory; import ory.F2BFactory; public class F1Factory { private F1Factory(){ } public static DepDAO getDepDAO(){ int type1=1;//第一层工厂的选择类型,按理应该从用户的配置信息中读取,我们这里模拟 if(type1==1){ return epDAO(); }else if(type1==2){ return epDAO(); } return null; } }

实现接口

  第二层dao

12345678910111213141516171819202122232425package ory; import AO; import ory.F3A_RDB_Factory; import ory.F2BFactory; public class F2AFactory { private F2AFactory() { } public static DepDAO getDepDAO() { int type2 = 3;// 第二层工厂的选择类型,按理应该从用户的配置信息中读取,我们这里模拟了 if (type2 == 1) { //return F3A_File_epDAO(); } else if (type2 == 2) { //return F3A_ODB_epDAO(); } else if (type2 == 3) { return F3A_RDB_epDAO(); }else if (type2 == 4) { //return F3A_XML_epDAO(); } return null; } }
1234567891011package ory; import AO; public class F2BFactory { private F2BFactory(){ } public static DepDAO getDepDAO(){ return null; } }

  第三层dao

123456789101112131415161718192021package ory; import AO; import ory.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_epDAO(); }else if(type3==2){ return F4A_RDB_Oracle_epDAO(); }else if(type3==3){ //return F4A_RDB_XML_epDAO(); } return null; } }

  第四层dao

123456789101112131415161718192021222324252627package ory; import AO; import jbImpl; import ibernateImpl; import dbcImpl; import paImpl; 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; } }

  实现类:

12345678910package ; import AO; public class DepEjbImpl implements DepDAO{ @Override public void create(String userId, String name) { tln("利用DepEjbImpl向数据库写入:"+userId+","+name); } }
12345678910package rnate; import AO; public class DepHibernateImpl implements DepDAO{ @Override public void create(String userId, String name) { tln("利用DepHibernateImpl向数据库写入:"+userId+","+name); } }
12345678910package ; import AO; public class DepJdbcImpl implements DepDAO{ @Override public void create(String userId, String name) { tln("利用DepJdbcImpl向数据库写入:"+userId+","+name); } }
12345678910package ; import AO; public class DepJpaImpl implements DepDAO{ @Override public void create(String userId, String name) { tln("利用DepJpaImpl向数据库写入:"+userId+","+name); } }

  测试:

123456789101112package ; import AO; import ory.F1Factory; //本类是dao层的用户,相当于逻辑层 public class Client { public static void main(String[] args) { DepDAO dao = epDAO(); te("1001", "Jack"); } }

  测试结果:

1利用DepEjbImpl向数据库写入:1001,Jack