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.