java - DAO工厂 : return a new instance or always the same?

标签 java design-patterns dao factory-pattern

我想到了一个简单的问题: 我有我的 DAOFactory 类:

public class DAOFactory {
    public static UserDAO createUserDAO() {
        return new UserDAO();
    }

    public static AdminDAO createUserDAO() {
        return new AdminDAO();
    }
    //etc etc
}

通过这种方式(据我所知这是标准的),每次有人请求 DAO 时,都会创建一个新实例。 实际上,每个 DAO 不需要有多个实例,除非我遗漏了一些东西。 :D

那么,我们为什么不这样做呢?

public class DAOFactory {
    /* eventually we could use lazy initialization */
    private static UserDAO userDAO = new UserDAO();
    private static UserDAO AdminDAO = new AdminDAO();
    //etc etc
    public static UserDAO createUserDAO() {
        return userDAO;
    }

    public static AdminDAO createUserDAO() {
        return adminDAO;
    }
    //etc etc
}

就性能和内存而言,前者和后者有什么区别? 我想,实际上,对于 DAOFactory 的客户端来说,这两种实现没有区别。

最佳答案

基本上,如果您的 DAO 类是不可变的或无状态的,那么您可以做到这一点,但如果不是,您必须使 DAO 类线程安全,如果多个线程访问同一个对象并扰乱其状态,它可以创建失败。

(在单线程环境中,你写的内容是可以接受的,但是当你编写DAO模式时,我确定它不是单线程的)

那么为什么我们不这样做,为什么不一样:线程安全成为一个问题。

关于java - DAO工厂 : return a new instance or always the same?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12319707/

相关文章:

java - Webview 后退按钮(goback)不起作用

java - Android DAO 添加查询 "' @Query 不适用于字段”

java - Spring MVC 中需要 Model POJO 吗?

java - JMockit 模拟在初始化期间抛出异常的类

java - 向 MongoDB 文档中的对象添加新字段

java - 如何在Java正则表达式中限制多个空格?

PHP:管理实体类型的设计模式

java - 在单例模式中,当两个或多个线程同时执行时会发生什么?

c++ - C++ 中的适配器公共(public)函数 - 好吗?坏的?甚至是真实的模式?

java - Spring 数据 : Method with annotation @Query doesn't work as expected