Implementación Adapter Pattern - lenoryv/Design-Patterns GitHub Wiki

Tomemos nuestro ejemplo de conversor de moneda e impleméntelo usando el lenguaje Kotlin y el adaptador de objetos

Aquí la interfaz de conversión de moneda (Targert) y su subclase CurrencyToDollarConverter

interface CurrencyConverter{
    fun convertCurrency(countryName: String)
}

class CurrencyToDollarConverter: CurrencyConverter{
    override fun convertCurrency(countryName: String) {
        console.log("Dollar Currency")
    }
}

CurrencyToEuroConverter asume un papel de adaptado

class CurrencyToEuroConverter{
    fun convertCurrency(isoCode: String){
        console.log("Euro currency")
    }
}

Aquí nuestro adaptador

class CurrencyConverterAdapter(private val currencyToEuroConverter: CurrencyToEuroConverter): CurrencyConverter{
    override fun convertCurrency(countryName: String) {
        val currencyIsoCode = getCurrencyIsoCode()
        currencyToEuroConverter.convertCurrency(currencyIsoCode)
    }

    private fun getCurrencyIsoCode(): String = "This is ISO code"
}

fun main() {
    val currencyToDollarConverter = CurrencyToDollarConverter()
    currencyToDollarConverter.convertCurrency("Country name")

    val currencyToEuroConverter = CurrencyToEuroConverter()
    val currencyConverterAdapter = CurrencyConverterAdapter(currencyToEuroConverter)
    currencyConverterAdapter.convertCurrency("Country name")
}

La salida será la siguiente:

Dollar Currency Euro currency

El adaptador es muy útil cuando necesita usar un tercero incompatible y es difícil cambiar su código para que coincida con el resto, y no olvide aprovechar el adaptador de objetos cuando necesite usar varias subclases adaptando la interfaz de su clase de padres.

Eso es todo para el patrón del adaptador y, como de costumbre, puede consultar el libro de patrones de diseño de The Gang of four para obtener más detalles.