Foro sobre Java EE > Dudas con Interfaces
Por ejemplo, para acceder a una base de datos tenemos varias interfaces:
- Connection
- Statement
- PreparedStatement
- ResultSet
Entre otras. Todos los drivers JDBC deben apegarse a este contrato, para que una consulta a una base de datos sea uniforme y/o estándar sin importar el manejador RDBMS. De otra forma, cada sistema de bases de datos implementaría su driver y sus métodos para conectarse, y sería realmente complicado hacer una aplicación que soporte múltiples accesos.
Es el típico error de principiante, no te preocupes a todos nos ha pasado pero has hecho bien en cuestionartelo y preguntar, porque si está para algo están.
Las interfaces es en lo que se basan muchas tecnologías como por ejemplo spring gracias a las interfaces que implementamos de estas tecnologias nos permiten usar y ampliar su funcionamiento.
Un ejemplo sencillo es el que te ha puesto @antoniovl tu tienes tu interfaz a implementar con esos métodos
----------------------
public interface bdConnection {
Connection getConnection()
Statement createStatement
PreparedStatement createPreparedStament
}
--------------------------------------
Cuando tu instancias un objeto de esa interfaz lo que te permite es que implemente la versión de esa interfaz que tu quieres. Por ejemplo podría tener una version para MySQL y otra para Oracle
bdConnection mySQLConnection = new mySQLDBConnection();
bdConnection oracleConnection = new oracleDBConnection();
Connection conn1 = mySQLConnection.getConnection();
Lo que harían esas clases es implementar las conexiones, statements, etc.. para cada tecnologías
----------------------
public class mySQLDBConnection implements bdConnection{
public Connection getConnection(){
Context context = new InitialContext();
DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/myDB");
Connection conn = dataSource.getConnection();
return conn;
}
....
}
public class oracleDBConnection implements bdConnection{
public Connection getConnection(){
Class.forName("org.postgresql.Driver");
Connection connection = null;
connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:mkyong","username","password");
return connection;
}
..
}
------------------------------------
Usando interfaces te permite tener varias implementaciones para la misma interfaz y con solo cambiar la implementación del objeto al ser instanciado te permiete usar una base de datos u otra facilmente
bdConnection mySQLConnection = new mySQLDBConnection();
bdConnection oracleConnection = new oracleDBConnection();
luego se usan igual porque tienen los mismos métodos (getConnection, createStatement,createPreparedStament) pero cada uno usa su tecnología.
Si no hubieras usado interfaces no sería tan fácil cambiar la base de datos de tu aplicación.
Buenas tardes.
A ver si alguien me explica mejor para que sirven las interfaces, ya que por mas que leo sobre ello, para mi no tienen mucho sentido.
Sé que sirven para crear una regla y para obligar a las clases que las implementen crear sus métodos, pero que más me da a mi obligar mediante una interfaz a crear un método obligatoriamente o crearlo igual sin tener que implementar nada. Me refiero a que si por ejemplo yo cuando cree una clase quiero crear un metodo lo creo y no tengo que obligarme a crearlo con una interfaz.
Yo veo las interfaces como simples recordatorios para "que no se te olvide tal método", no sé si alguien me puede explicar mejor este tema, si sirven para algo más que se me esté escapando a mí, si tiene una utilidad real y buena, o algún ejemplo real donde se vea el uso de las interfaces. No sé si me explico, pero el heredar de una clase lo veo lógico y de utilidad, ya que puedes utilizar todos sus métodos sin tener que volver a escribir nada de código, pero las interfaces que tienes que escribir todo de nuevo....
Espero vuestros comentarios o explicaciones.
Un saludo.