Entendendo o padrão de projeto Adapter em Java
O padrão de projeto Adapter é um padrão de projeto estrutural que permite que objetos com interfaces incompatíveis trabalhem juntos. Ele faz isso criando uma classe intermediária que atua como um adaptador entre dois objetos incompatíveis.
Imagine que você tem uma aplicação que utiliza uma biblioteca externa para acessar um banco de dados. No entanto, a biblioteca externa utiliza uma interface de banco de dados incompatível com a interface de banco de dados que sua aplicação espera. É aqui que o padrão de projeto Adapter pode ser útil.
Com o padrão de projeto Adapter, você pode criar uma classe intermediária que converte a interface da biblioteca externa na interface de banco de dados que sua aplicação espera. Essa classe intermediária é o adaptador, que atua como um intermediário entre a biblioteca externa e sua aplicação.
Exemplo de implementação em Java
Veja um exemplo de código em Java para entender melhor como funciona o padrão de projeto Adapter:
// Interface de banco de dados esperada pela aplicação
public interface BancoDeDados {
void conectar(String url, String usuario, String senha);
void desconectar();
ResultSet executarQuery(String query);
}
// Biblioteca externa com interface incompatível
public class DatabaseLib {
public void connect(String url, String user, String password) {
// ...
}
public void disconnect() {
// ...
}
public QueryResult execute(String query) {
// ...
}
}
// Adaptador que converte a interface da biblioteca externa na interface esperada pela aplicação
public class AdapterDatabase implements BancoDeDados {
private DatabaseLib dbLib;
public AdapterDatabase(DatabaseLib dbLib) {
this.dbLib = dbLib;
}
public void conectar(String url, String usuario, String senha) {
dbLib.connect(url, usuario, senha);
}
public void desconectar() {
dbLib.disconnect();
}
public ResultSet executarQuery(String query) {
QueryResult queryResult = dbLib.execute(query);
// converte o resultado da biblioteca externa em um ResultSet para a aplicação
return convertQueryResultToResultSet(queryResult);
}
private ResultSet convertQueryResultToResultSet(QueryResult queryResult) {
// ...
}
}
// Exemplo de uso do adaptador
public class Aplicacao {
public static void main(String[] args) {
// cria o adaptador com a biblioteca externa
DatabaseLib dbLib = new DatabaseLib();
BancoDeDados bancoDeDados = new AdapterDatabase(dbLib);
// usa a interface de banco de dados esperada pela aplicação
bancoDeDados.conectar("jdbc:mysql://localhost:3306/meubanco", "usuario", "senha");
ResultSet resultSet = bancoDeDados.executarQuery("SELECT * FROM tabela");
// ...
bancoDeDados.desconectar();
}
}
No exemplo acima, a classe
atua como um adaptador entre a biblioteca externa AdapterDatabase
e a interface de banco de dados esperada pela aplicação DatabaseLib
. O adaptador converte os métodos da interface da biblioteca externa (BancoDeDados
, connect()
e disconnect()
) na interface esperada pela aplicação (execute()
, conectar()
e desconectar()
).executarQuery()
Conclusão
O padrão de projeto Adapter é uma ótima solução para integrar sistemas ou bibliotecas com interfaces incompatíveis. Ele ajuda a manter o código modular e fácil de manter, além de permitir o uso de diferentes bibliotecas externas para realizar a mesma tarefa. Espero que este post tenha sido útil para você entender melhor como o padrão de projeto Adapter funciona em Java.