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

3 mins de leitura


Adapter - Implementando um Adaptador para Conversão de Moedas

Explorando Padrões de Projetos com Kotlin - 3/5


Desenvolvimento Backend com Kotlin
Desenvolvimento Backend com Kotlin

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

Nota

O padrão Adapter é uma ferramenta valiosa para lidar com incompatibilidades de interface e integrar componentes heterogêneos. No entanto, é importante avaliar cuidadosamente sua utilização para garantir que os benefícios superem os possíveis custos em termos de complexidade e desempenho.

Resolução

class OldCurrencyConverter {
  fun convertUSDtoGBP(amount: Double): Double {
    return amount * 0.80 // 80% do valor em USD
  }
}
 
class CurrencyAdapter(private val oldConverter: OldCurrencyConverter) {
  fun convertUSDtoEUR(amount: Double): Double {
    TODO("Implementar a lógica de adaptação usando o $oldConverter e taxa definida no enunciado.")
  }
}
 
fun main() {
  val input = readLine()?.toDoubleOrNull() ?: return
  val oldConverter = OldCurrencyConverter()
  val adapter = CurrencyAdapter(oldConverter)
 
  val amountInEUR = adapter.convertUSDtoEUR(input)
 
  println("USD: $input")
  println("EUR: $amountInEUR")
}

Para encontrar outras soluções, verifique aqui.

Caso encontre algum erro ou tenha sugestões, clique aqui e abra uma issue no Github.