O padrão do adaptador em Java
1. Visão geral
Neste tutorial rápido, daremos uma olhada no padrão Adapter e sua implementação Java.
2. Padrão do adaptador
An Adapter pattern acts as a connector between two incompatible interfaces that otherwise cannot be connected directly. Um adaptador envolve uma classe existente com uma nova interface para que se torne compatível com a interface do cliente.
O principal motivo por trás do uso desse padrão é converter uma interface existente em outra interface que o cliente espera. Geralmente é implementado assim que o aplicativo é projetado.
2.1. Exemplo de padrão de adaptador
Considere um cenário em que há um aplicativo desenvolvido nos EUA que retorna a velocidade máxima de carros de luxo em milhas por hora (MPH). Agora, precisamos usar o mesmo aplicativo para nosso cliente no Reino Unido que deseja os mesmos resultados, mas em quilômetros por hora (km / h).
Para lidar com esse problema, criaremos um adaptador que converterá os valores e nos fornecerá os resultados desejados:
Primeiro, vamos criar a interface originalMovable que deve retornar a velocidade de alguns carros de luxo em milhas por hora:
public interface Movable {
// returns speed in MPH
double getSpeed();
}
Agora vamos criar uma implementação concreta dessa interface:
public class BugattiVeyron implements Movable {
@Override
public double getSpeed() {
return 268;
}
}
Agora vamos criar uma interface de adaptadorMovableAdapter que será baseada na mesma classeMovable. Pode ser ligeiramente modificado para gerar resultados diferentes em diferentes cenários:
public interface MovableAdapter {
// returns speed in KM/H
double getSpeed();
}
A implementação desta interface consistirá no método privadoconvertMPHtoKMPH() que será usado para a conversão:
public class MovableAdapterImpl implements MovableAdapter {
private Movable luxuryCars;
// standard constructors
@Override
public double getSpeed() {
return convertMPHtoKMPH(luxuryCars.getSpeed());
}
private double convertMPHtoKMPH(double mph) {
return mph * 1.60934;
}
}
Agora usaremos apenas os métodos definidos em nosso adaptador e obteremos as velocidades convertidas. Nesse caso, a seguinte asserção será verdadeira:
@Test
public void whenConvertingMPHToKMPH_thenSuccessfullyConverted() {
Movable bugattiVeyron = new BugattiVeyron();
MovableAdapter bugattiVeyronAdapter = new MovableAdapterImpl(bugattiVeyron);
assertEquals(bugattiVeyronAdapter.getSpeed(), 431.30312, 0.00001);
}
Como podemos notar aqui, nosso adaptador converte268 mph em431 km/h para este caso particular.
2.2. Quando usar o padrão do adaptador
-
When an outside component provides captivating functionality that we’d like to reuse, but it’s incompatible with our current application. Um adaptador adequado pode ser desenvolvido para torná-los compatíveis entre si
-
Quando nosso aplicativo não é compatível com a interface que nosso cliente espera
-
Quando queremos reutilizar o código legado em nosso aplicativo sem fazer nenhuma modificação no código original
3. Conclusão
Neste artigo, vimos o padrão de design do adaptador em Java.
O código-fonte completo para este exemplo está disponívelover on GitHub.