Pular para o conteúdo
Bruno Dórea
Todos os posts

4 mins de leitura


Implementando um Adaptador para Conversão de Moedas

Desafios de Código Java Intermediários - Design Patterns - 5/5


Java AI Powered
Java AI Powered

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.

EntradaSaída
200USD: 200.0
EUR: 170.0
EntradaSaída
150USD: 150.0
EUR: 127.5
EntradaSaída
1000.0USD: 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.