java语言 百分网手机站

java设计模式:DAO模式

时间:2020-09-12 13:05:58 java语言 我要投稿

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的设计模式编程之解释器模式的运用11-23

Java的设计模式编程中责任链模式的运用的实例讲解12-01

该怎么使用Java设计模式编程中的OCP开闭原则?11-23

简单讲解Java的Future编程模式方案11-25

Java开发策略模式的简单应用实现方法11-30

PHP中的设计模式详解08-15

C语言编程中使用设计模式中的原型模式的讲解11-19

photoshop柔光模式和叠加模式的运用教程11-15

海关通关作业新模式11-12