Implementando um Adaptador para Conversão de Moedas
Desafios de Código Java Intermediários - Design Patterns - 5/5
Descrição
O padrão de projeto Adapter é um padrão de projeto estrutural que permite que objetos com interfaces incompatíveis trabalhem juntos. Ele atua como um intermediário, adaptando a interface de uma classe para outra interface esperada pelo cliente.
Neste desafio, você deverá implementar um conversor de moedas que permitirá que valores monetários sejam convertidos de dólares americanos (USD) para euros (EUR). Embora exista uma taxa de conversão direta de 1 USD = 0.85 EUR, o nosso sistema inicialmente só suportava a conversão de USD para libras esterlinas (GBP). Utilizando o padrão Adapter, você deve adaptar esse sistema antigo para fornecer a nova funcionalidade de conversão direta para EUR, usando a conversão intermediária para GBP.
Entrada
Um valor em dólares americanos USD (Double).
Saída
O valor convertido para euros EUR (Double) usando o adaptador.
Taxa de conversão direta (para referência):
- 1 USD = 0.85 EUR
Taxas de conversão para a adaptação:
- 1 USD para GBP = 0.80
- 1 GBP para EUR = 1.0625
Exemplos
A tabela abaixo apresenta exemplos com alguns dados de entrada e suas respectivas saídas esperadas. Certifique-se de testar seu programa com esses exemplos e com outros casos possíveis.
Entrada | Saída |
---|---|
200 | USD: 200.0 |
EUR: 170.0 |
Entrada | Saída |
---|---|
150 | USD: 150.0 |
EUR: 127.5 |
Entrada | Saída |
---|---|
1000.0 | USD: 1000.0 |
EUR: 850.0 |
Resolução
import java.util.Scanner;
class OldCurrencyConverter {
public double convertUSDtoGBP(double amount) {
return amount * 0.80;
}
}
class GBPToEURConverter {
public double convertGBPToEUR(double amount) {
return amount * 1.0625;
}
}
class CurrencyAdapter {
private final OldCurrencyConverter oldConverter;
private final GBPToEURConverter newConverter;
public CurrencyAdapter(OldCurrencyConverter oldConverter, GBPToEURConverter newConverter) {
this.oldConverter = oldConverter;
this.newConverter = newConverter;
}
public double convertUSDtoEUR(double amount) {
double gbp = oldConverter.convertUSDtoGBP(amount);
return newConverter.convertGBPToEUR(gbp);
}
}
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double input = Double.parseDouble(scanner.nextLine());
OldCurrencyConverter oldConverter = new OldCurrencyConverter();
GBPToEURConverter newConverter = new GBPToEURConverter();
CurrencyAdapter adapter = new CurrencyAdapter(oldConverter, newConverter);
double eur = adapter.convertUSDtoEUR(input);
System.out.println("USD: " + input);
System.out.println("EUR: " + eur);
}
}
Para encontrar outras soluções, verifique aqui.
Caso encontre algum erro ou tenha sugestões, clique aqui e abra uma issue no Github.