(следуя моему предыдущему комментарию) ниже дает вам представление о том, как будет выглядеть дизайн, и это только классы скелетов:
public interface Connection {
Statement createStatement(String sql);
}
public interface DbConnectionManager {
Connection getConnection(String dbDriverName);
}
public class MySqlConnection implements Connection {
@Override
public Statement createStatement(String sql) {
return null;
}
}
public class PostgresConnection implements Connection {
@Override
public Statement createStatement(String sql) {
return null;
}
}
public class Statement {
Result executeQuery() {
return new Result() {
//...use sql here
//...
};
}
}
public abstract class Result<T> {
}
public class Person {
}
public class Student extends Person {
}
public class MyTestDbManager implements DbConnectionManager {
private final Connection connection;
public MyTestDbManager(String dbDriverName) {
connection = getConnection(dbDriverName);
}
public static void main(String[] args) {
MyTestDbManager myManager = new MyTestDbManager("postgresql");
Result result = myManager.connection.createStatement("SELCET * FROM MY_TABLE").executeQuery();
}
@Override
public Connection getConnection(String dbDriverName) {
PostgresConnection postgresDb = new PostgresConnection();
// postgresDb set all configs here
return postgresDb;
}
}