浅谈java中dao工厂设计模式
2011-02-17 15:25
288 查看
来源:http://www.114java.com/javajichu/201007/2389.html
在JAVA开发中,随
着软件分层设计的流行及广泛的应用,对于DAO设
计模式大家已经不再陌生了,DAO层
已经在软件系统的开发中成为必不可少的一层,将后台的数据层和前台的VO进行分离。前段时间也针对于DAO[b]设计模式[/b]介
绍过一个基于Hibernate的" 泛型DAO的设计
"。
通过DAO的
设计的确可以让我们的软件系统已经将数据层和表现层进行了简单的分离,让我们系统各层次的功能更加的清晰。所以我们开始洋洋得意了,DAO的
引入让系统的耦合性更加的松散,表现层再也不需要关心后台数据操作的变化了。于是我们开始高枕无忧了,我们肆无忌惮的在表现层通过调用DAO来
实现我们的系统了。事实真的如此吗?那我们就举个例子来看看我们的系统是否真的具有解偶的能力了。
现在我们有个员工管理系统,在该系统中,Person.java表示员工这个对象,它对应着数据库中的person表。还有用于操作Person对象的DAO接
口—PersonDAO.java,还有一个PersonDAO的实现类PersonDAOImpl.java。在PersonDAOImpl.java
中我们实现了操作Person对象的所有的方法。我们很自豪的说,看我们已经把操作封装在PersonDAO中了,现在我们可以在表现层(jsp,或者VO操作类中)使
用PersonDAO personDAO=new PersonDAOImpl()来调用DAO操作我们的数据对象
了。当我们陶醉于自己写的优美的代码的时候,项目经理来通知了,由于使用Hibernate的效率偏低,客户开始不满了,还是让我们重新用JDBC再重写
一遍吧。于是所有DAO的Hibernate实现开始全部转换成JDBC实现。但是项目经理建议不要破坏现有的
Hibernate实现,以后可以通过技术研究来提升Hibernate的访问效率。于是我们开始写了又写了一套JDBC的实现—
PersonDAOJDBCImpl.java,现在问题出来了,表现层大量的使用了PersonDAO personDAO=new
PersonDAOImpl(),全部改成new PersonDAOJDBCImpl()谈何容易,我们是不是开始欲哭无泪了。
怎么解决类似的问题呢?于是我们开始引进DAO工厂模式。我们建立一个类DaoFactory.java对DAO进
行统一管理。
表现层通过PersonDAO personDAO=DaoFactory.get getPersonDAOInstance();来实例化DAO实
例。这样问题就解决了,DAO改变了,我们只需要在DAO工厂类中修改一下代
码:return new PersonDAOJDBCImpl()
;那我们的应用就快速切换到JDBC实现了。可见利用工厂模式,我们的系统又进一步的解耦,表现层真的无需再关系DAO层
的变化了,一切交给DAO工厂来解决。
使用过Spring这样框架的开发人员都知道,Spring通过利用IoC来实现类之间的解耦。其实在DAO工厂中
我们也可以简单的借鉴一下IoC的思想,更进一步解除类之间的耦合。Spring是通过配置xml文件来进行IoC的,那么我们也可以借助于xml文件来
实现。比如下面的xml:
这是我设计实现的工作流系统给业务系统提供的接口所配置的xml,所有的接口都配置在xml中,我们怎么使用呢?我只不过是把DAO工厂进
行进一步的改进,通过
ProcessInstanceService processInstanceService=DaoFactory.getDao(ProcessInstanceService.class,”
processInstanceService”);从传入的参数我们可以看出,我们清楚的知道要调用的接口
ProcessInstanceService,同时通过字符串”
processInstanceService”,我们可以解析上面的配置文件,得到具体实现类的路径,通过反射得到该实现类的实例。
具体的DAO
工厂类的实现,朋友们有兴趣可以自己去实现,我就不详细介绍了。
终于写完了,以上便是对DAO工厂一些浅显的理解。现在正在学习设计模式,以后会根据自己的所学所思,介绍自己对各个设计模式的理解,希望大家一块学习讨论。
在JAVA开发中,随
着软件分层设计的流行及广泛的应用,对于DAO设
计模式大家已经不再陌生了,DAO层
已经在软件系统的开发中成为必不可少的一层,将后台的数据层和前台的VO进行分离。前段时间也针对于DAO[b]设计模式[/b]介
绍过一个基于Hibernate的" 泛型DAO的设计
"。
通过DAO的
设计的确可以让我们的软件系统已经将数据层和表现层进行了简单的分离,让我们系统各层次的功能更加的清晰。所以我们开始洋洋得意了,DAO的
引入让系统的耦合性更加的松散,表现层再也不需要关心后台数据操作的变化了。于是我们开始高枕无忧了,我们肆无忌惮的在表现层通过调用DAO来
实现我们的系统了。事实真的如此吗?那我们就举个例子来看看我们的系统是否真的具有解偶的能力了。
现在我们有个员工管理系统,在该系统中,Person.java表示员工这个对象,它对应着数据库中的person表。还有用于操作Person对象的DAO接
口—PersonDAO.java,还有一个PersonDAO的实现类PersonDAOImpl.java。在PersonDAOImpl.java
中我们实现了操作Person对象的所有的方法。我们很自豪的说,看我们已经把操作封装在PersonDAO中了,现在我们可以在表现层(jsp,或者VO操作类中)使
用PersonDAO personDAO=new PersonDAOImpl()来调用DAO操作我们的数据对象
了。当我们陶醉于自己写的优美的代码的时候,项目经理来通知了,由于使用Hibernate的效率偏低,客户开始不满了,还是让我们重新用JDBC再重写
一遍吧。于是所有DAO的Hibernate实现开始全部转换成JDBC实现。但是项目经理建议不要破坏现有的
Hibernate实现,以后可以通过技术研究来提升Hibernate的访问效率。于是我们开始写了又写了一套JDBC的实现—
PersonDAOJDBCImpl.java,现在问题出来了,表现层大量的使用了PersonDAO personDAO=new
PersonDAOImpl(),全部改成new PersonDAOJDBCImpl()谈何容易,我们是不是开始欲哭无泪了。
怎么解决类似的问题呢?于是我们开始引进DAO工厂模式。我们建立一个类DaoFactory.java对DAO进
行统一管理。
DaoFactory.java: public class DaoFactory{ public static PersonDAO getPersonDAOInstance() { return new PersonDAOImpl() ; } //得到其他的DAO实例 …… } |
例。这样问题就解决了,DAO改变了,我们只需要在DAO工厂类中修改一下代
码:return new PersonDAOJDBCImpl()
;那我们的应用就快速切换到JDBC实现了。可见利用工厂模式,我们的系统又进一步的解耦,表现层真的无需再关系DAO层
的变化了,一切交给DAO工厂来解决。
使用过Spring这样框架的开发人员都知道,Spring通过利用IoC来实现类之间的解耦。其实在DAO工厂中
我们也可以简单的借鉴一下IoC的思想,更进一步解除类之间的耦合。Spring是通过配置xml文件来进行IoC的,那么我们也可以借助于xml文件来
实现。比如下面的xml:
<?xml version="1.0"?> <config> <daos> <!-- 组 织机构服务接口实现类 --> <dao id="organizationService" type="com.baiyyy.oa.services.organization.OrganizationServiceImpl"> </dao> <!-- 工 作流参与者接口 --> <dao id="participantService" type="com.baiyyy.workflow.services.impl.ParticipantServiceImpl"> </dao> <!-- 工 作流定义接口 --> <dao id="processDefinitionService" type="com.baiyyy.workflow.services.impl.ProcessDefinitionServiceImpl"> </dao> <!-- 工 作流实例接口 --> <dao id="processInstanceService" type="com.baiyyy.workflow.services.impl.ProcessInstanceServiceImpl"> </dao> </daos> </config> |
行进一步的改进,通过
ProcessInstanceService processInstanceService=DaoFactory.getDao(ProcessInstanceService.class,”
processInstanceService”);从传入的参数我们可以看出,我们清楚的知道要调用的接口
ProcessInstanceService,同时通过字符串”
processInstanceService”,我们可以解析上面的配置文件,得到具体实现类的路径,通过反射得到该实现类的实例。
具体的DAO
工厂类的实现,朋友们有兴趣可以自己去实现,我就不详细介绍了。
终于写完了,以上便是对DAO工厂一些浅显的理解。现在正在学习设计模式,以后会根据自己的所学所思,介绍自己对各个设计模式的理解,希望大家一块学习讨论。
相关文章推荐
- 浅谈java中dao工厂设计模式
- 利用工厂设计模式实现业务层和dao层的解耦
- 浅谈DAO工厂设计模式
- 关于工厂和dao(j2ee设计模式和GOF的设计模式)
- 浅谈DAO工厂设计模式
- Java Dao工厂设计模式
- 浅谈DAO工厂设计模式
- 浅谈DAO工厂设计模式(工厂模式的好处)
- 使用单例和工厂设计模式实现dao实现层的解耦
- javaee 数据库操作DAO工厂设计模式
- 设计模式-旧话重提之类工厂的使用
- 设计模式之工厂模式学习
- 设计模式--工厂模式和抽象工厂模式
- 设计模式-工厂模式
- 设计模式之工厂模式
- 深入浅出设计模式之工厂模式
- Java设计模式之工厂方法模式
- 设计模式---工厂模型
- 设计模式(一)--简单工厂
- javascript学习(11)——[设计模式]工厂模式