Conexão com Banco + Patterns

E ai galera do Fórum tudo blz…

Seguinte, estou criando um projeto onde preciso fazer a conexão com um Banco de Dados PostgreSQL…

Estava pensando em usar os Padrões de Projeto Singleton e DAO.

Mas vamos a prática, como eu faria isso?

Tenho uma classe Singleton, para garantir o retorna de uma unica instancia da conexao…

public class DBConnectionPool {
	
	private static DBConnectionPool instance;
	
	private DBConnectionPool() {
        // Construtor é privado. Cria conexão para o banco de dados
    }
	
	public synchronized static DBConnectionPool getInstance() {
		if (instance == null) {
			instance = new DBConnectionPool();
		}
		return instance;
	}
	
	public Connection getConnection() {
		Connection conn = null;
		//Pega uma conexão livre ou uma nova conexão
		return conn;
	}

	public void releaseConnection(Connection conn) {
		//Libera a conexão de volta pro pool
	}
}

Tudo bem, tenho um Singleton, mas é dentro do construtor desta classe que eu devo criar a minha conexão?

Class.forName("org.postgresql.Driver");
Connection conexao = DriverManager.getConnection("jdbc:postgresql:java", "root", "larhena");

Outra dúvida:
E depois, como eu faço para acessar essa conexão criada?

public class TestDAO implements InterfaceTestDAO{
	
	private Connection con;
	
	public TestDAO(){

		this.con = ??????????????????????
                
                 this.con = DBConnectionPool.getInstance(); //retorna uma instancia da classe DBConnectionPool e não uma instancia de Connection...

	}
	
	public void metodoQueExecutaQuery(String name) {
		// TODO Auto-generated method stub
		
		Statement stmt = null;
		ResultSet rs;
		
		try {
			stmt = con.createStatement();
			rs = stmt.executeQuery("SELECT * FROM....");
			
			// PEGA O RESULTADO....
			
			rs.close();
			stmt.close();
		} catch(Exception e) {
			//TRATA EXCEÇÃO
		}
		
		return null;
	}

}

Espero que entendam minhas duvidas… Abraço a todos…

eu criei um singleton para conexão da seguinte maneira:

package acesita.cl1.persistencia.connection;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;

public class DBConnection {

	private static DBConnection dbConnection = null;
	protected Connection connection = null;
	
	private DBConnection() {}
	
	public static DBConnection getInstance(HashMap<String,String> parameters) throws SQLException {
		if(dbConnection == null) {
			dbConnection = new DBConnection();
			dbConnection.setConnection(new FactoryConnection().getFactoryConnection(parameters));
		}
		
		return dbConnection;
	}
	
	public void setConnection(Connection connection) {
		this.connection = connection;
	}
	
	public Connection getConnection() {
		return this.connection;
	}
}

Tenho um atributo do tipo connection que recebe a conexao criada, e sempre que precisar a conexão eu faço o seguinte;

DBConnection db = DBConnection.getInstance();
Connection conn = db.getConnection();

ou simplesmente,

Connection conn = DBConnection.getInstance().getConnection();

espero ter ajudado. Caso alguem tenha alguma crítica sobre o meu codigo, favor postar, para que eu possa melhora-lo

Acho que seria mais interessante você usar um padrão Factory para criar os DAOs, invés de usar um Singleton. Ou então usar injeção de dependencia.