Java 在实现抽象工厂时,我应该以单例的方式实现DAO,还是有更好的方法?

Java 在实现抽象工厂时,我应该以单例的方式实现DAO,还是有更好的方法?,java,jdbc,design-patterns,singleton,dao,Java,Jdbc,Design Patterns,Singleton,Dao,我有一个DaoFactory抽象类,它返回具体的工厂,我只对Mysql做过 public abstract class DAOFactory { public static final int MYSQL = 1; public abstract CarDao getCarDao(); public abstract UserDao getUserDao(); public abstract OrderDao getOrderDao(); public a

我有一个DaoFactory抽象类,它返回具体的工厂,我只对Mysql做过

public abstract class DAOFactory {
    public static final int MYSQL = 1;
    public abstract CarDao getCarDao();
    public abstract UserDao getUserDao();
    public abstract OrderDao getOrderDao();
    public abstract CarCategoryDao getCarCategoryDao();
    public static DAOFactory getDAOFactory(
            int whichFactory) {
        switch (whichFactory) {
            case MYSQL:
                return new MySQLDAOFactory();
            default :
                return null;
        }
    }
}
我有一个MysqlFactory,它返回Dao实现

public class MySQLDAOFactory extends DAOFactory {
    private static final Logger LOGGER = LogManager.getLogger(MySQLDAOFactory.class);
    private static DataSource DATA_SOURCE;

    public static void dataSourceInit(){
        try {
            Context initContext = new InitialContext();
            Context envContext = (Context) initContext.lookup("java:comp/env");
            DATA_SOURCE = (DataSource) envContext.lookup("jdbc/UsersDB");
        } catch (NamingException e) {
            LOGGER.error(e);
        }
    }
    public static Connection getConnection(){
        Connection connection = null;
       if(DATA_SOURCE==null){
         dataSourceInit();
       }
       try {
           connection = DATA_SOURCE.getConnection();
            } catch (SQLException e) {
                LOGGER.error(e);
            }
        return connection;
    }
    @Override
    public CarDao getCarDao() {
        return new MySQLCarDao();
    }
    @Override
    public UserDao getUserDao() {
        return new MySQLUserDao();
    }
    @Override
    public OrderDao getOrderDao() {
        return new MySQLOrderDao();
    }
    @Override
    public CarCategoryDao getCarCategoryDao() {
        return new MySQLCarCategoryDao();
    }
}

我需要制作Dao单例还是有更好的方法?我从oracle网站上获得了这个实现

这是为了学习练习还是用于实际目的的代码?@chrylis-cautiouslyoptimistic-你能告诉我每种情况吗?感谢您在实际使用中,更好的方法是“不要这样做”,并使用JPA、Spring数据或两者兼用。