请问在J2EE项目中生产DAO的工厂类,是工厂单一实例模式吗?

来源:百度知道 编辑:UC知道 时间:2024/05/10 12:04:14
生产出来的DAO是单一实例模式吗? 如果是 那是为什么?
如果不是那又是为什么? 各位高手帮小弟解解惑~~ 在这里先谢谢各位啦~

分不多,但心诚.

举个例子吧:
在用Hibernate开发时使用DAO(Data Access Object)模式实现透明持久化,这里的DAO相当于一种工具,开发时不用考虑持久层的种种,只要专心写dao方法即可,dao构造方法里面封装了SessionFactory构建session工厂,使用了BuildTransaction开始事务,这样用户实例化dao时就已经开始了事物,可以执行sava(),delete()等操作了。

多数设计模式,归根结底就是为了“封装变化”
使得被封装的变化不会影响现有的代码。

比如工厂模式封装了 DAO的不同实现和DAO被创建的方法。
也就是说,你的程序只要面对DAO的接口,而DAO的实现可以随意变化而不会影响使用DAO的那部分逻辑。
也就是说,你可以改变一个字段的名称而只修改DAO实现,甚至你把数据库从Mysql移植到Oracle,都只是修改DAO接口的具体实现,修改工厂方法就可以,原有的业务逻辑无需改变。

你甚至可以写多套DAO的实现,工厂类根据配置加载不同的DAO实现来完成数据库的访问。

说了这么多,是在说为什么会有工厂这样的设计模式,它是为了封装哪部分变化。
而至于工厂产出的产品是不是一定是单例,那是不一定的,是不是单例主要是内存占用和线程安全方面的权衡。

DAO可以是单例,也可以不是。

不一定,看需要,DAO一般都是对数据库操作的基础类,只是命名问题。大家都习惯了,所以写程序的时候都DAO,这样大家都能看懂,比较方便。